<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:cf="https://www.futureplc.com/rss/content-flags"
>
    <channel>
                    <atom:link href="https://www.tomsguide.com/feeds/tag/google-pixel-phones" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Google-pixel-phones ]]></title>
                <link>https://www.tomsguide.com/phones/android-phones/google-pixel-phones</link>
        <description><![CDATA[ All the latest google-pixel-phones content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Fri, 04 Sep 2026 10:00:00 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ Google Messages finally has a personalization option I’ve wanted forever — here’s how to turn it on ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google Messages waited far too long to join the personalization party. iMessage and apps like Whatsapp have long offered custom background, while Android's primary texting app kept users locked into plain designs. </p><p>That changed recently with the arrival of dedicated chat themes. You can now abandon the default look, swap out boring backdrops for vibrant wallpapers, and give every group chat or contact its own distinct personality. </p><p>Interestingly, these changes are only visible to you, so you can go as bold as you like without affecting anyone else's view.  </p><h2 id="what-you-need-to-change-your-background">What you need to change your background </h2><p>Custom themes are built into recent versions of Google Messages, so if your app updated recently, you may already have the feature waiting for you. </p><p>However, if you open a chat and do not see the theme settings yet, you simply need to update the app through the Google Play Store. </p><p><strong>Open the store, tap your profile icon in the top-right corner, select Manage apps & device, and install any pending updates</strong> for Google Messages. Chat themes are available on both standard releases and beta builds.  </p><p>You also need to make sure Rich Communication Services are active, as custom themes rely on RCS technology.<strong> Open Google Messages, tap your profile icon, navigate to Messages settings, and select RCS chats</strong> to confirm that the feature is toggled on. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GbJqsTCVF6kmKLaiWkriX6" name="Google Pixel 10 hands-on" alt="Google Pixel 10 hands-on." src="https://cdn.mos.cms.futurecdn.net/GbJqsTCVF6kmKLaiWkriX6.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><h2 id="find-the-chat-theme-menu">Find the chat theme menu </h2><p>Opening the theme customization menu takes only three quick taps from inside any conversation thread. </p><p>First, <strong>open Google Messages and select the specific text thread </strong>you want to design. Next,<strong> tap the three vertical dots </strong>located in the top-right corner of the screen and <strong>select Chat theme</strong> from the dropdown list to open the visual design editor. </p><h2 id="pick-your-chat-colors-and-backgrounds">Pick your chat colors and backgrounds </h2><p><strong>The first customization option is chat colors</strong>. By default, your color matches your system accent color, but you can choose from eight additional styles. Each color option changes your conversation background, chat bubbles, and interface elements like the voice recorder button. </p><p><strong>Wallpapers offer even more personalization</strong>. Google provides pre-selected images organized by category — Animals, Architecture, Landscapes, Space, and others. If these don't appeal to you, <strong>tap Choose a photo to select any image from your phone or Google Photos</strong>. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XpB10W"></div>                            </div>                            <script src="https://kwizly.com/embed/XpB10W.js" async></script><p><strong>What feature are you waiting for next? </strong>Now that Google has finally delivered custom chat themes, what should the next feature drop be? Drop your thoughts in the comments below. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/83-of-phone-storage-issues-come-down-to-just-two-culprits-heres-how-to-fix-both">83% of phone storage issues come down to just two culprits — here’s how to fix bot</a></li><li><a href="https://www.tomsguide.com/phones/i-discovered-a-hidden-android-feature-that-shows-which-apps-are-watching-me">I discovered a hidden Android feature that shows which apps are watching me, and what it revealed was startling. Here's how to take back control of your phone</a></li><li><a href="https://www.tomsguide.com/phones/your-phone-battery-is-dying-faster-than-it-should-how-to-fix-it">The most common charging habit is actually killing your phone — here's the fix</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-messages-finally-has-a-personalization-option-ive-wanted-forever-heres-how-to-turn-it-on</link>
                                                                            <description>
                            <![CDATA[ Learn how to change your Google Messages background, update chat bubble colors, and set custom photo wallpapers in a few simple taps. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">uxEaHxMvhCHTnmoSbHFhNn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/an2vaQWCyzWejRx8AXfAcY-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 04 Sep 2026 10:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Android 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/an2vaQWCyzWejRx8AXfAcY-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[In-hand image of Google Pixel 11 Pro showing the display]]></media:description>                                                            <media:text><![CDATA[In-hand image of Google Pixel 11 Pro showing the display]]></media:text>
                                <media:title type="plain"><![CDATA[In-hand image of Google Pixel 11 Pro showing the display]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/an2vaQWCyzWejRx8AXfAcY-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google Messages waited far too long to join the personalization party. iMessage and apps like Whatsapp have long offered custom background, while Android's primary texting app kept users locked into plain designs. </p><p>That changed recently with the arrival of dedicated chat themes. You can now abandon the default look, swap out boring backdrops for vibrant wallpapers, and give every group chat or contact its own distinct personality. </p><p>Interestingly, these changes are only visible to you, so you can go as bold as you like without affecting anyone else's view.  </p><h2 id="what-you-need-to-change-your-background">What you need to change your background </h2><p>Custom themes are built into recent versions of Google Messages, so if your app updated recently, you may already have the feature waiting for you. </p><p>However, if you open a chat and do not see the theme settings yet, you simply need to update the app through the Google Play Store. </p><p><strong>Open the store, tap your profile icon in the top-right corner, select Manage apps & device, and install any pending updates</strong> for Google Messages. Chat themes are available on both standard releases and beta builds.  </p><p>You also need to make sure Rich Communication Services are active, as custom themes rely on RCS technology.<strong> Open Google Messages, tap your profile icon, navigate to Messages settings, and select RCS chats</strong> to confirm that the feature is toggled on. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GbJqsTCVF6kmKLaiWkriX6" name="Google Pixel 10 hands-on" alt="Google Pixel 10 hands-on." src="https://cdn.mos.cms.futurecdn.net/GbJqsTCVF6kmKLaiWkriX6.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><h2 id="find-the-chat-theme-menu">Find the chat theme menu </h2><p>Opening the theme customization menu takes only three quick taps from inside any conversation thread. </p><p>First, <strong>open Google Messages and select the specific text thread </strong>you want to design. Next,<strong> tap the three vertical dots </strong>located in the top-right corner of the screen and <strong>select Chat theme</strong> from the dropdown list to open the visual design editor. </p><h2 id="pick-your-chat-colors-and-backgrounds">Pick your chat colors and backgrounds </h2><p><strong>The first customization option is chat colors</strong>. By default, your color matches your system accent color, but you can choose from eight additional styles. Each color option changes your conversation background, chat bubbles, and interface elements like the voice recorder button. </p><p><strong>Wallpapers offer even more personalization</strong>. Google provides pre-selected images organized by category — Animals, Architecture, Landscapes, Space, and others. If these don't appeal to you, <strong>tap Choose a photo to select any image from your phone or Google Photos</strong>. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XpB10W"></div>                            </div>                            <script src="https://kwizly.com/embed/XpB10W.js" async></script><p><strong>What feature are you waiting for next? </strong>Now that Google has finally delivered custom chat themes, what should the next feature drop be? Drop your thoughts in the comments below. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/83-of-phone-storage-issues-come-down-to-just-two-culprits-heres-how-to-fix-both">83% of phone storage issues come down to just two culprits — here’s how to fix bot</a></li><li><a href="https://www.tomsguide.com/phones/i-discovered-a-hidden-android-feature-that-shows-which-apps-are-watching-me">I discovered a hidden Android feature that shows which apps are watching me, and what it revealed was startling. Here's how to take back control of your phone</a></li><li><a href="https://www.tomsguide.com/phones/your-phone-battery-is-dying-faster-than-it-should-how-to-fix-it">The most common charging habit is actually killing your phone — here's the fix</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The new Pixel 11 Pro is good, but boring — it's time for Google to start shaking things up or risk becoming irrelevant ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I’ve been using Pixel devices for years, and I’ve always appreciated the way Google approaches smartphones. Pixels always deliver a mix of clean software, clever camera tricks and the confidence that they don’t need to outdo Apple and Samsung when it comes to raw performance. </p><p>But after spending the last two weeks with the Pixel 11 Pro, that charm is starting to wear thin for me. Not because the phone is bad — it’s actually good in plenty of areas — but because Google seems content to coast. And with 2026, packed with powerhouse devices all trying new things, coasting is a dangerous strategy.</p><h2 id="this-year-s-big-improvements">This year’s big improvements</h2><p>First, let me point out that the Pixel 11 Pro nails the basics. The camera is still one of the most reliable point‑and‑shoot experiences around, and the display is genuinely impressive this year. As detailed in our combined <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro and Pro XL review</a>, its screen hits 2,860 nits peak brightness, while its larger sibling reaches 2,877 nits, making them the brightest phone screens we’ve ever tested. That’s brighter than Samsung’s Galaxy Z Fold 8 Ultra at 2,687 nits, and more than double the iPhone 17 Pro Max’s 1,281 nits. Out in the Australian sun, that difference is immediately apparent.</p><p>Camera performance is strong, too. Its 5x telephoto lens produces crisp long‑range shots, and as detailed in our review, Google’s AI‑boosted 120x zoom actually outperforms Samsung’s 100x attempt in clarity. The new Magic Capture mode, which records a video and simultaneously extracts high-quality stills from it, works quite well, and Rambler, which uses Gemini AI to transcribe your rambling speech into well-structured text, is quite impressive. Live Translate for media is also genuinely useful, allowing you to dub content into another language in real-time — it’ll even keep the voice and accent of the original speaker, which is actually kind of mind-blowing.</p><h2 id="impressive-ai-features-but-do-they-justify-a-new-phone">Impressive AI features, but do they justify a new phone?</h2><p>Despite being sold as the ultimate AI phone, the Pixel 11 Pro isn’t exactly a compute monster. In fact, <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review#section-google-pixel-11-pro-pixel-11-pro-xl-review-the-downs">our benchmarks</a> show its Tensor G6 chipset landing well behind its rivals in Geekbench AI tests — a surprising result for a device built around on‑device AI features. And that’s what makes this year’s Pixel 11-exclusive AI features feel a bit arbitrary. Rambler, Magic Capture, Live Translate for media — they’re clever tools, but none of them appear to require any dramatic hardware leap. The Pixel 11 Pro and Pro XL simply aren’t delivering the kind of AI throughput that would justify locking these features to new devices.</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="an2vaQWCyzWejRx8AXfAcY" name="20260903_152015" alt="In-hand image of Google Pixel 11 Pro showing the display" src="https://cdn.mos.cms.futurecdn.net/an2vaQWCyzWejRx8AXfAcY.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>Google has a long history of keeping software tricks exclusive to the latest Pixel, even when older hardware could clearly cope — think Photo Unblur (exclusive to Pixel 7 at launch) or Audio Magic Eraser (exclusive to Pixel 8 at launch) — and that pattern seems to continue with this year’s lineup. So while the AI perks are fun to play with, they’re far less exciting to me than a refreshed design or a meaningfully upgraded camera system would’ve been. If Google wants the Pixel to feel essential again, it needs to deliver real hardware upgrades — not just software that likely could’ve shipped to last year’s phones.</p><h2 id="the-feeling-of-sameness-is-hard-to-shake">The feeling of sameness is hard to shake</h2><p>After two weeks with the Pixel 11 Pro, the sameness is impossible to ignore. The last few Pixels have looked and felt nearly identical. Same silhouette, same camera bar, and same “good enough” approach to performance. I can pick up a Pixel 9 Pro, 10 Pro or 11 Pro and my muscle memory barely registers the difference. That’s not consistency; that’s stagnancy.</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="Chmo8zXUZFovjT7i5Xmute" name="20260903_152059" alt="In-hand image of the Google Pixel 11 Pro showing rear of the device" src="https://cdn.mos.cms.futurecdn.net/Chmo8zXUZFovjT7i5Xmute.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>And stagnancy becomes even more obvious when you look at the hard numbers. The Pixel 11 Pro’s battery life is 13 hours 25 minutes, which is actually worse than last year’s Pixel 10 Pro at 13 hours 43 minutes. Meanwhile, the iPhone 17 Pro hits 15 hours 21 minutes, and the Galaxy S26 Ultra lasts 16 hours 10 minutes. Those are meaningful gaps for devices that aren’t too far off from each other in terms of price.</p><h2 id="no-meaningful-performance-gains">No meaningful performance gains</h2><p>It’s a similar story when it comes to performance: the Pixel 11 Pro’s Geekbench 6 scores — 2,649 single‑core / 7,164 multi‑core — are an improvement over the Pixel 10 Pro, but nowhere near Samsung’s Galaxy S26 Ultra (3,785 / 11,563) or the iPhone 17 Pro Max (3,871 / 9,968). And the aforementioned AI benchmark is downright brutal: the Pixel 11 Pro scores 9,148, while Samsung hits 83,047 and Apple reaches 48,549. When a flagship is being outpaced by that margin, especially one that’s being sold as a class-leading AI-centric device, it’s hard to pretend everything’s fine.</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="ymVGdwAvmrwudVmm64VLGm" name="20260903_152134" alt="Google Pixel 11 Pro lying face down on glass table" src="https://cdn.mos.cms.futurecdn.net/ymVGdwAvmrwudVmm64VLGm.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>Even the exclusive Gemini features — as polished as they are — don’t change how the phone feels in the hand, or how it performs under load, or how long it lasts on a busy day. They’re clever additions, but they’re still additions. They don’t fix the underlying issue: Google hasn’t meaningfully pushed its hardware forward in years.</p><h2 id="good-enough-is-no-longer-enough">Good enough is no longer enough</h2><p>And then there’s HiLight, the only visually distinct hardware update Google has made this year. It’s basically a tiny LED that blinks when Gemini is listening or when an assigned contact calls. It’s cute, but it’s hardly the kind of innovation that keeps a brand relevant. Nothing has been offering similar features for years and to be honest, it never really impressed anyone.</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="KFMMEwMQgz23CDdaKgWrt5" name="20260903_155625" alt="Google Pixel 11 Pro laying on table with Gemini app asking "Any new ideas to explore?"" src="https://cdn.mos.cms.futurecdn.net/KFMMEwMQgz23CDdaKgWrt5.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>A meaningful redesign would go a long way. And I’m not talking about slightly smaller bezels or a slightly tweaked camera bump — I mean a proper refresh. Something that signals Google is hungry again. Maybe that means an Ultra-style device that actually competes with the big players, or a foldable that doesn’t feel like it’s two years behind the competition. It also wouldn’t hurt if the next Pixel had a Tensor chip that could go toe-to-toe with higher-range Snapdragon chips, or a battery that charges fast and lasts long.</p><h2 id="maybe-it-s-time-to-go-back-to-the-drawing-board">Maybe it’s time to go back to the drawing board</h2><p>Of course, the Pixel 11 Pro’s biggest problem isn’t its performance, battery or price — though all three could be better. It’s that it feels like Google is playing it safe, and that’s risky in a market where everyone else is swinging for the fences.</p><p>Google clearly wants the Pixel line to sit alongside Samsung and Apple as one of the industry’s top‑tier smartphone brands, but the reality is that it’s falling behind fast‑moving competitors like Motorola, Xiaomi and Oppo. These brands are pushing aggressive hardware innovation, competitive pricing and rapid release cycles, while Google’s hardware strategy has remained relatively unchanged.</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="Xp2CZnFYoT4KHYWpg9E8gQ" name="20260903_152633" alt="In-hand image of Google Pixel 11 Pro against street background during day time" src="https://cdn.mos.cms.futurecdn.net/Xp2CZnFYoT4KHYWpg9E8gQ.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 Google genuinely wants to make a meaningful impact in the smartphone space, it needs more than incremental updates. I want Google’s Pixel line to take risks again and surprise me. </p><p>I want a Pixel phone that doesn’t feel like it was designed by a committee trying not to rock the boat. Because if Google keeps serving up “good, but boring,” the Pixel line won’t just fall behind — it’ll fade into the background entirely.</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/i-wanted-to-be-excited-about-the-pixel-11-but-google-has-made-that-impossible-with-the-most-uninspired-launch-ive-ever-seen">I've been using Pixel phones for the past 5 years, but the lack of Pixel 11 upgrades is indefensible</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">I checked out the Pixel 11, Pixel 11 Pro, and Pixel 11 Pro XL — here’s the one I recommend</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Google Pixel 11 Pro Fold review: Falling behind the foldable curve</a></li></ul><div data-widget-type="review" data-model-name="Google Pixel 11 Pro"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/the-new-pixel-11-pro-is-good-but-boring-its-time-for-google-to-start-shaking-things-up-or-risk-becoming-irrelevant</link>
                                                                            <description>
                            <![CDATA[ Google’s Pixel 11 lineup is solid but uninspired, held back by hardware that no longer feels ahead of the pack ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jp6JoonFzEJRYXA7t8s2qD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/yz9BVmffSt8H4hqk6SuE6F-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 03 Sep 2026 06:15:20 +0000</pubDate>                                                                                                                                <updated>Thu, 03 Sep 2026 06:16:09 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Stephen Lambrechts ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/JN3jEQpqyyt32as8AJJqXe.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Stephen Lambrechts is the Managing Editor of Tom&#039;s Guide AU and has written professionally across the categories of tech, film, television and gaming for the last 15 years. Before Tom&#039;s Guide, he spent several years as a Senior Journalist at TechRadar, had a brief stint as Editor in Chief at Official Xbox Magazine Australia, and worked at IGN. He&#039;s also written for such mags and sites as APC, TechLife Australia, T3, FilmInk, Daily Telegraph and AskMen. Additionally, he&#039;s a Tomatometer-approved critic on Rotten Tomatoes, and has offered his tech advice on radio and television.&lt;/p&gt;&lt;p&gt;He&#039;s an expert when it comes to smartphones, TVs, gaming and streaming, having contributed many reviews in each of those categories over the years. Despite his many articles on streaming, he&#039;s a passionate collector of physical media who enjoys listening to vinyl records and acquiring obscure horror movies from the &#039;60s, &#039;70s and 80s. He can usually be seen rocking the latest retro sneaker releases, particularly Air Jordans and Reebok Pumps. Occasionally, he also indulges in other non-hipster stuff, like hiking.&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/yz9BVmffSt8H4hqk6SuE6F-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[In-hand image of Google Pixel 11 Pro in the street during day time]]></media:description>                                                            <media:text><![CDATA[In-hand image of Google Pixel 11 Pro in the street during day time]]></media:text>
                                <media:title type="plain"><![CDATA[In-hand image of Google Pixel 11 Pro in the street during day time]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/yz9BVmffSt8H4hqk6SuE6F-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve been using Pixel devices for years, and I’ve always appreciated the way Google approaches smartphones. Pixels always deliver a mix of clean software, clever camera tricks and the confidence that they don’t need to outdo Apple and Samsung when it comes to raw performance. </p><p>But after spending the last two weeks with the Pixel 11 Pro, that charm is starting to wear thin for me. Not because the phone is bad — it’s actually good in plenty of areas — but because Google seems content to coast. And with 2026, packed with powerhouse devices all trying new things, coasting is a dangerous strategy.</p><h2 id="this-year-s-big-improvements">This year’s big improvements</h2><p>First, let me point out that the Pixel 11 Pro nails the basics. The camera is still one of the most reliable point‑and‑shoot experiences around, and the display is genuinely impressive this year. As detailed in our combined <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro and Pro XL review</a>, its screen hits 2,860 nits peak brightness, while its larger sibling reaches 2,877 nits, making them the brightest phone screens we’ve ever tested. That’s brighter than Samsung’s Galaxy Z Fold 8 Ultra at 2,687 nits, and more than double the iPhone 17 Pro Max’s 1,281 nits. Out in the Australian sun, that difference is immediately apparent.</p><p>Camera performance is strong, too. Its 5x telephoto lens produces crisp long‑range shots, and as detailed in our review, Google’s AI‑boosted 120x zoom actually outperforms Samsung’s 100x attempt in clarity. The new Magic Capture mode, which records a video and simultaneously extracts high-quality stills from it, works quite well, and Rambler, which uses Gemini AI to transcribe your rambling speech into well-structured text, is quite impressive. Live Translate for media is also genuinely useful, allowing you to dub content into another language in real-time — it’ll even keep the voice and accent of the original speaker, which is actually kind of mind-blowing.</p><h2 id="impressive-ai-features-but-do-they-justify-a-new-phone">Impressive AI features, but do they justify a new phone?</h2><p>Despite being sold as the ultimate AI phone, the Pixel 11 Pro isn’t exactly a compute monster. In fact, <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review#section-google-pixel-11-pro-pixel-11-pro-xl-review-the-downs">our benchmarks</a> show its Tensor G6 chipset landing well behind its rivals in Geekbench AI tests — a surprising result for a device built around on‑device AI features. And that’s what makes this year’s Pixel 11-exclusive AI features feel a bit arbitrary. Rambler, Magic Capture, Live Translate for media — they’re clever tools, but none of them appear to require any dramatic hardware leap. The Pixel 11 Pro and Pro XL simply aren’t delivering the kind of AI throughput that would justify locking these features to new devices.</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="an2vaQWCyzWejRx8AXfAcY" name="20260903_152015" alt="In-hand image of Google Pixel 11 Pro showing the display" src="https://cdn.mos.cms.futurecdn.net/an2vaQWCyzWejRx8AXfAcY.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>Google has a long history of keeping software tricks exclusive to the latest Pixel, even when older hardware could clearly cope — think Photo Unblur (exclusive to Pixel 7 at launch) or Audio Magic Eraser (exclusive to Pixel 8 at launch) — and that pattern seems to continue with this year’s lineup. So while the AI perks are fun to play with, they’re far less exciting to me than a refreshed design or a meaningfully upgraded camera system would’ve been. If Google wants the Pixel to feel essential again, it needs to deliver real hardware upgrades — not just software that likely could’ve shipped to last year’s phones.</p><h2 id="the-feeling-of-sameness-is-hard-to-shake">The feeling of sameness is hard to shake</h2><p>After two weeks with the Pixel 11 Pro, the sameness is impossible to ignore. The last few Pixels have looked and felt nearly identical. Same silhouette, same camera bar, and same “good enough” approach to performance. I can pick up a Pixel 9 Pro, 10 Pro or 11 Pro and my muscle memory barely registers the difference. That’s not consistency; that’s stagnancy.</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="Chmo8zXUZFovjT7i5Xmute" name="20260903_152059" alt="In-hand image of the Google Pixel 11 Pro showing rear of the device" src="https://cdn.mos.cms.futurecdn.net/Chmo8zXUZFovjT7i5Xmute.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>And stagnancy becomes even more obvious when you look at the hard numbers. The Pixel 11 Pro’s battery life is 13 hours 25 minutes, which is actually worse than last year’s Pixel 10 Pro at 13 hours 43 minutes. Meanwhile, the iPhone 17 Pro hits 15 hours 21 minutes, and the Galaxy S26 Ultra lasts 16 hours 10 minutes. Those are meaningful gaps for devices that aren’t too far off from each other in terms of price.</p><h2 id="no-meaningful-performance-gains">No meaningful performance gains</h2><p>It’s a similar story when it comes to performance: the Pixel 11 Pro’s Geekbench 6 scores — 2,649 single‑core / 7,164 multi‑core — are an improvement over the Pixel 10 Pro, but nowhere near Samsung’s Galaxy S26 Ultra (3,785 / 11,563) or the iPhone 17 Pro Max (3,871 / 9,968). And the aforementioned AI benchmark is downright brutal: the Pixel 11 Pro scores 9,148, while Samsung hits 83,047 and Apple reaches 48,549. When a flagship is being outpaced by that margin, especially one that’s being sold as a class-leading AI-centric device, it’s hard to pretend everything’s fine.</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="ymVGdwAvmrwudVmm64VLGm" name="20260903_152134" alt="Google Pixel 11 Pro lying face down on glass table" src="https://cdn.mos.cms.futurecdn.net/ymVGdwAvmrwudVmm64VLGm.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>Even the exclusive Gemini features — as polished as they are — don’t change how the phone feels in the hand, or how it performs under load, or how long it lasts on a busy day. They’re clever additions, but they’re still additions. They don’t fix the underlying issue: Google hasn’t meaningfully pushed its hardware forward in years.</p><h2 id="good-enough-is-no-longer-enough">Good enough is no longer enough</h2><p>And then there’s HiLight, the only visually distinct hardware update Google has made this year. It’s basically a tiny LED that blinks when Gemini is listening or when an assigned contact calls. It’s cute, but it’s hardly the kind of innovation that keeps a brand relevant. Nothing has been offering similar features for years and to be honest, it never really impressed anyone.</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="KFMMEwMQgz23CDdaKgWrt5" name="20260903_155625" alt="Google Pixel 11 Pro laying on table with Gemini app asking "Any new ideas to explore?"" src="https://cdn.mos.cms.futurecdn.net/KFMMEwMQgz23CDdaKgWrt5.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>A meaningful redesign would go a long way. And I’m not talking about slightly smaller bezels or a slightly tweaked camera bump — I mean a proper refresh. Something that signals Google is hungry again. Maybe that means an Ultra-style device that actually competes with the big players, or a foldable that doesn’t feel like it’s two years behind the competition. It also wouldn’t hurt if the next Pixel had a Tensor chip that could go toe-to-toe with higher-range Snapdragon chips, or a battery that charges fast and lasts long.</p><h2 id="maybe-it-s-time-to-go-back-to-the-drawing-board">Maybe it’s time to go back to the drawing board</h2><p>Of course, the Pixel 11 Pro’s biggest problem isn’t its performance, battery or price — though all three could be better. It’s that it feels like Google is playing it safe, and that’s risky in a market where everyone else is swinging for the fences.</p><p>Google clearly wants the Pixel line to sit alongside Samsung and Apple as one of the industry’s top‑tier smartphone brands, but the reality is that it’s falling behind fast‑moving competitors like Motorola, Xiaomi and Oppo. These brands are pushing aggressive hardware innovation, competitive pricing and rapid release cycles, while Google’s hardware strategy has remained relatively unchanged.</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="Xp2CZnFYoT4KHYWpg9E8gQ" name="20260903_152633" alt="In-hand image of Google Pixel 11 Pro against street background during day time" src="https://cdn.mos.cms.futurecdn.net/Xp2CZnFYoT4KHYWpg9E8gQ.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 Google genuinely wants to make a meaningful impact in the smartphone space, it needs more than incremental updates. I want Google’s Pixel line to take risks again and surprise me. </p><p>I want a Pixel phone that doesn’t feel like it was designed by a committee trying not to rock the boat. Because if Google keeps serving up “good, but boring,” the Pixel line won’t just fall behind — it’ll fade into the background entirely.</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/i-wanted-to-be-excited-about-the-pixel-11-but-google-has-made-that-impossible-with-the-most-uninspired-launch-ive-ever-seen">I've been using Pixel phones for the past 5 years, but the lack of Pixel 11 upgrades is indefensible</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">I checked out the Pixel 11, Pixel 11 Pro, and Pixel 11 Pro XL — here’s the one I recommend</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Google Pixel 11 Pro Fold review: Falling behind the foldable curve</a></li></ul><div data-widget-type="review" data-model-name="Google Pixel 11 Pro"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The Pixel 11 is a swing-and-a-miss of a phone, but this one AI camera feature is genuinely useful ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you've ever tried to snap photos of an unpredictably moving target, you'll know that a smartphone is not the best tool for the job. There's no burst mode in a lot of default camera apps, and actually tapping the shutter button by hand isn't always fast enough. Google thinks it's figured out a solution, though.</p><p>In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-review">Google Pixel 11 review</a>, we weren't overly enthused by the phone as a whole, but its "Magic Capture" camera mode is something I've found truly useful. It works by recording a video clip, then uses AI to analyze each frame and pull out the most appropriate stills. It's not quite a dual-capture mode, but it's probably the closest thing Pixel phones actually have right now.</p><p>The question is, can Magic Capture actually do what Google has promised? <a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-testing-pixel-11-pro-xl-for-a-week-heres-why-hilight-is-the-most-disappointing-new-feature">HiLight has turned out to be a colossal disappointment</a>, and the Pixel 11 is about as exciting as beige paint. So can Google recapture user enthusiasm through the camera? I tested it to find out.</p><h2 id="how-to-use-magic-capture">How to use Magic Capture</h2><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="YvbLS83tC8zPiUxMw97K3m" name="pixel2" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/YvbLS83tC8zPiUxMw97K3m.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>In my experience, a lot of new AI features can be difficult to find, even if you know where to look. That's not the case with Magic Capture. Google has put it front and center in the Pixel 11's camera app. It is prominently displayed at the bottom of the screen, next to the Photo and Video toggles that have been around for years.</p><p>Tap it, and the camera interface suddenly gets a whole lot cleaner. Your only serious options are to tap the shutter button and control the level of zoom. There is a settings toggle that lets you control whether you have Video Boost switched on too, should you prefer things that way.</p><p>All you need to do is tap the shutter button and your phone will start recording. Once you've finished, the onboard AI will analyze the footage and figure out which frames are worthy of becoming photos. Those new photos then get added to your camera reel automatically.</p><p>It's surprisingly simple, and that's one of the things I really like about Magic Capture. You don't need to do a bunch of research to figure out how it works, or what you can gain from it. The button is positioned front-and-center, and it works just like every other video camera mode on your phone.</p><h2 id="there-are-some-restrictions-on-how-it-works">There are some restrictions on how it 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dwHR9JPRYGZjEvwow5JR3X" name="pixel" alt="magic capture screenshots" src="https://cdn.mos.cms.futurecdn.net/dwHR9JPRYGZjEvwow5JR3X.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>As simple as Magic Capture is to use, there are a few limitations. The first is that you can't actually capture more than two minutes of video at a time. If you start getting close, a warning message will pop up on screen counting down to the moment the video will stop.</p><p>In my experience, you are limited to five photos from each video. It doesn't matter whether it's 30 seconds long, or the full two minutes, Magic Capture seems to have imposed that hard limit. </p><p>Google hasn't explained why these limits are in place, but my guess is that it didn't want the AI analysis running indefinitely. A two minute and five photo limit ensures that Magic Capture doesn't try to keep running and eat up too much space on Google's AI servers. Because, yes, this feature does rely on the internet.</p><p>You can still film Magic Capture clips while offline, and the on-board AI will find you a single photo that's automatically added to your library. However, if you want the other four, you will need to connect to the internet. The good news is that your video will be effectively held in a pending queue, waiting to connect to either Wi-Fi or cellular data networks — at which point it will process and hand over the missing photos.</p><h2 id="overall-it-39-s-a-great-new-feature">Overall, it's a great new feature</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/YqTSLidua2n7ntyqGTN2MS.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5yziLSE3Tcz7ZqdvbsBNdQ.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/fqJUsWfE8XGBDCL6exKFBS.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Ww8R8FbwRxNDDPYDacX87S.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/CXX6dyokLfaktGhrNuJytR.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>The time I've spent with Magic Capture has been, for the most part, very enjoyable. It's so easy to just click on the video, knowing that Google's AI will end up capturing some of the best stills and converting them into standalone photos.</p><p>If you are planning on using Magic Capture yourself, I'd suggest tempering your expectations on what it can do. It's not a miracle worker, and it won't suddenly be able to create amazing images out of the shortest and scrappiest video clip you can capture. Likewise, because these photos are being ripped from moving video, you may end up with some blurring and signs of motion in the final result. </p><p>The actual resolution and overall size of each photo varies as well, which is worth remembering if you're concerned about that sort of thing. Just remember that high resolution doesn't automatically equal good quality.</p><p>But, overall, this is a very handy feature to have. While the restriction on video length and the number of available images is kind of a drag, Magic Capture does make it a heck of a lot easier to grab some photos of awkward targets — like my insanely energetic labradors. It's all hands-off, and it sure as heck beats going frame-by-frame in a video or mass-deleting photos that were taken during an overzealous use of burst-mode photography.</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/i-wrote-and-edited-this-article-with-pixel-11s-rambler-dictation-feature-and-things-did-not-go-according-to-plan">I wrote and edited this article with Pixel 11's 'Rambler' dictation feature — and things did not go according to plan</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-event-is-official-for-september-9-iphone-ultra-iphone-18-pro-max-watch-12-and-more">Apple 'surprise and shine' event set for September 9 — iPhone Ultra, iPhone 18 Pro Max, Apple Watch Series 12, and more</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review">Samsung Galaxy S26 FE hands-on review: I'm not sure if this phone needed to exist</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/the-pixel-11-is-a-swing-and-a-miss-of-a-phone-but-this-one-ai-camera-feature-is-genuinely-useful</link>
                                                                            <description>
                            <![CDATA[ Google Pixel 11 doesn't have a lot going for it, but the Magic Capture AI camera mode is easily its standout feature. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VPByoCHUcQKAvHzAYVLfmc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/hHsWPTnu6Ettb733CLB4rF-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 29 Aug 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/hHsWPTnu6Ettb733CLB4rF-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 review.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 review.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 review.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/hHsWPTnu6Ettb733CLB4rF-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you've ever tried to snap photos of an unpredictably moving target, you'll know that a smartphone is not the best tool for the job. There's no burst mode in a lot of default camera apps, and actually tapping the shutter button by hand isn't always fast enough. Google thinks it's figured out a solution, though.</p><p>In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-review">Google Pixel 11 review</a>, we weren't overly enthused by the phone as a whole, but its "Magic Capture" camera mode is something I've found truly useful. It works by recording a video clip, then uses AI to analyze each frame and pull out the most appropriate stills. It's not quite a dual-capture mode, but it's probably the closest thing Pixel phones actually have right now.</p><p>The question is, can Magic Capture actually do what Google has promised? <a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-testing-pixel-11-pro-xl-for-a-week-heres-why-hilight-is-the-most-disappointing-new-feature">HiLight has turned out to be a colossal disappointment</a>, and the Pixel 11 is about as exciting as beige paint. So can Google recapture user enthusiasm through the camera? I tested it to find out.</p><h2 id="how-to-use-magic-capture">How to use Magic Capture</h2><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="YvbLS83tC8zPiUxMw97K3m" name="pixel2" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/YvbLS83tC8zPiUxMw97K3m.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>In my experience, a lot of new AI features can be difficult to find, even if you know where to look. That's not the case with Magic Capture. Google has put it front and center in the Pixel 11's camera app. It is prominently displayed at the bottom of the screen, next to the Photo and Video toggles that have been around for years.</p><p>Tap it, and the camera interface suddenly gets a whole lot cleaner. Your only serious options are to tap the shutter button and control the level of zoom. There is a settings toggle that lets you control whether you have Video Boost switched on too, should you prefer things that way.</p><p>All you need to do is tap the shutter button and your phone will start recording. Once you've finished, the onboard AI will analyze the footage and figure out which frames are worthy of becoming photos. Those new photos then get added to your camera reel automatically.</p><p>It's surprisingly simple, and that's one of the things I really like about Magic Capture. You don't need to do a bunch of research to figure out how it works, or what you can gain from it. The button is positioned front-and-center, and it works just like every other video camera mode on your phone.</p><h2 id="there-are-some-restrictions-on-how-it-works">There are some restrictions on how it 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dwHR9JPRYGZjEvwow5JR3X" name="pixel" alt="magic capture screenshots" src="https://cdn.mos.cms.futurecdn.net/dwHR9JPRYGZjEvwow5JR3X.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>As simple as Magic Capture is to use, there are a few limitations. The first is that you can't actually capture more than two minutes of video at a time. If you start getting close, a warning message will pop up on screen counting down to the moment the video will stop.</p><p>In my experience, you are limited to five photos from each video. It doesn't matter whether it's 30 seconds long, or the full two minutes, Magic Capture seems to have imposed that hard limit. </p><p>Google hasn't explained why these limits are in place, but my guess is that it didn't want the AI analysis running indefinitely. A two minute and five photo limit ensures that Magic Capture doesn't try to keep running and eat up too much space on Google's AI servers. Because, yes, this feature does rely on the internet.</p><p>You can still film Magic Capture clips while offline, and the on-board AI will find you a single photo that's automatically added to your library. However, if you want the other four, you will need to connect to the internet. The good news is that your video will be effectively held in a pending queue, waiting to connect to either Wi-Fi or cellular data networks — at which point it will process and hand over the missing photos.</p><h2 id="overall-it-39-s-a-great-new-feature">Overall, it's a great new feature</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/YqTSLidua2n7ntyqGTN2MS.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5yziLSE3Tcz7ZqdvbsBNdQ.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/fqJUsWfE8XGBDCL6exKFBS.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Ww8R8FbwRxNDDPYDacX87S.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/CXX6dyokLfaktGhrNuJytR.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>The time I've spent with Magic Capture has been, for the most part, very enjoyable. It's so easy to just click on the video, knowing that Google's AI will end up capturing some of the best stills and converting them into standalone photos.</p><p>If you are planning on using Magic Capture yourself, I'd suggest tempering your expectations on what it can do. It's not a miracle worker, and it won't suddenly be able to create amazing images out of the shortest and scrappiest video clip you can capture. Likewise, because these photos are being ripped from moving video, you may end up with some blurring and signs of motion in the final result. </p><p>The actual resolution and overall size of each photo varies as well, which is worth remembering if you're concerned about that sort of thing. Just remember that high resolution doesn't automatically equal good quality.</p><p>But, overall, this is a very handy feature to have. While the restriction on video length and the number of available images is kind of a drag, Magic Capture does make it a heck of a lot easier to grab some photos of awkward targets — like my insanely energetic labradors. It's all hands-off, and it sure as heck beats going frame-by-frame in a video or mass-deleting photos that were taken during an overzealous use of burst-mode photography.</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/i-wrote-and-edited-this-article-with-pixel-11s-rambler-dictation-feature-and-things-did-not-go-according-to-plan">I wrote and edited this article with Pixel 11's 'Rambler' dictation feature — and things did not go according to plan</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-event-is-official-for-september-9-iphone-ultra-iphone-18-pro-max-watch-12-and-more">Apple 'surprise and shine' event set for September 9 — iPhone Ultra, iPhone 18 Pro Max, Apple Watch Series 12, and more</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review">Samsung Galaxy S26 FE hands-on review: I'm not sure if this phone needed to exist</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I wrote and edited this article with Pixel 11's 'Rambler' dictation feature — and things did not go according to plan ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Earlier this year, I decided to <a href="https://www.tomsguide.com/phones/iphones/ios-27-beta-has-new-and-improved-dictation-software-i-tested-it-by-writing-this-whole-article-with-my-voice">try and write an article with my voice </a>sampling the different dictation software available on iPhones and Google Pixel phones. Both Apple and Google had been hyping up the capabilities of their new dictation software aided by brand new AI models. The results weren't awful, but they were fairly mixed.</p><p>At the time, Google had just announced the new Rambler AI dictation software but hadn't revealed exactly how it was going to roll out. Earlier this month, it <a href="https://blog.google/products-and-platforms/devices/pixel/pixel-11-features/" target="_blank">confirmed</a> that Rambler would be arriving on the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-review">Pixel 11</a> series, allowing a whole new kind of voice-to-text software that uses natural language AI to ensure the most accurate dictation possible — or so Google says.</p><p>Naturally, I decided to test the system and see if Rambler really does live up to Google's lofty claims. I was also curious to see whether the natural language systems would be capable of better understanding verbal commands and allow me to edit my work as I speak. Here's what happened.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XrgQxe"></div>                            </div>                            <script src="https://kwizly.com/embed/XrgQxe.js" async></script><h2 id="how-rambler-works">How Rambler 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:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YsFp6A2K9fYAXf3NYhvRL6" name="PXL_20260827_132007655" alt="google pixel 11 pro rambler" src="https://cdn.mos.cms.futurecdn.net/YsFp6A2K9fYAXf3NYhvRL6.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 Google's original <a href="https://blog.google/products-and-platforms/platforms/android/gemini-intelligence/" target="_blank">announcement</a> back at <a href="https://www.tomsguide.com/news/live/google-io-2026-live-news-updates">Google I/O in May</a>, Rambler is a way to ensure that users "don't have to worry about getting your words exactly right before you start.” It is designed for you to speak naturally to your phone and then use the AI to filter out all the unnecessary little parts of speech that you don't actually want transcribed. The ums, ahs and all the other verbal tics that you say without even thinking.</p><p>This essentially means that you can focus on what you're saying and the actual content of your work without having to worry about going back later and filtering out all those little things that would need to be removed later on.</p><p>Considering editing was the biggest issue I had with dictation software earlier this year, the idea that you could minimize that, or at the very least verbally make changes to text on the fly certainly piqued my curiosity.</p><p>Rambler is powered by <a href="https://www.tomsguide.com/ai/google-gemini/google-gemini-everything-you-need-to-know">Gemini AI</a>, and according to Google, it can understand multiple languages at once, allowing users who can speak multiple languages to switch between them as and when they see fit.</p><p>Google claims it's all about speed and accuracy, and Rambler is accessible at the top of your keyboard, replacing the old dictation functionality. While it originally launched on Pixel 11, Google has <a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-5-transcribe/" target="_blank">since confirmed</a> that it will be coming to Gboard on Android, Gemini on macOS, and the Chrome Browser.</p><h2 id="how-my-time-quot-typing-quot-with-rambler-is-going">How my time "typing" with Rambler is going</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xw9UTNvd4VWkG83zXjr4M6" name="PXL_20260827_132108496" alt="google pixel 11 pro rambler" src="https://cdn.mos.cms.futurecdn.net/xw9UTNvd4VWkG83zXjr4M6.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>So far I've been pretty impressed with how Rambler has done things. Not only has it been able to pick up what I'm saying with impressive clarity, it's also been able to do a lot of the formatting and punctuation without actually requiring me to specifically ask for it.</p><p>Generally speaking, as long as I can actually keep my words concise and my thoughts aligned, Rambler is having absolutely no issues with transcribing what I'm saying.</p><div><blockquote><p>As long as I can actually keep my words concise and my thoughts aligned, Rambler is having absolutely no issues with transcribing what I'm saying.</p></blockquote></div><p>Of course, the main limitation is that I'm not very good at doing that. I find it much easier to write or type than I do to speak, especially when that involves speaking off the cuff; organising my thoughts and relaying them to my own mouth in short order. This isn't a problem with Rambler itself; it's just how my brain works.</p><p>Then again, it feels like Google could have done a lot more to make the process a little bit smoother. When you start up Rambler, you get a little bar at the top of your keyboard that features a little visualisation based on what your microphone actually picks up. The more it hears, the higher the visualisation goes and so on. What Rambler doesn't include is a preview of what it has understood you've said, which makes organising your thoughts all the more difficult, especially if you try and correct a mistake mid-flow. </p><p>Having that preview would be a small improvement, but it would make a huge amount of difference, at least to me, in ensuring that I can continue my train of thought despite knowing that I just made a blunder or wanted to rewrite part of a sentence.</p><p>Despite the advances that Google has made with conversational AI and voice recognition, it is far from perfect — especially with relation to my own accent. For some reason, it recognised the word "other" as "are there" and "asking of it" as "asking for it." </p><p>Accent recognition has plagued voice control systems since their inception, and clearly more work needs to be done in this area.</p><h2 id="there-are-some-big-issues-that-need-addressing">There are some big issues that need addressing</h2><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="XdtoqUDagVmfr7jLUPviL6" name="PXL_20260827_132035025" alt="google pixel 11 pro rambler" src="https://cdn.mos.cms.futurecdn.net/XdtoqUDagVmfr7jLUPviL6.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>If anyone can tell, the previous paragraph was typed out from scratch, rather than using my voice. That's because attempting to get Rambler to edit and configure the text ended up wiping multiple paragraphs from this article for reasons I cannot understand. </p><p>Thankfully Google Docs was kind enough to let me undo those changes, but there were a lot of them, and my dedication to producing this article through voice alone meant I didn't notice for some time — and could have ended up losing about an hour of work in the process. If AI is supposed to make our lives better and improve productivity, it's going to have to avoid doing stupid things like this.</p><p>Anyway, back to using my voice, as promised.</p><p>Rambler can be used to edit what you've written, but in my brief time testing the feature it has been remarkably inconsistent. Obviously, that culminated in paragraphs of work being erased seemingly out of nowhere, but there have been instances where it seemingly struggles to understand what I'm trying to ask of it.</p><p>Naturally, the fact that there is no preview of what it has understood does make the editing process a little harder. You have to be able to memorise what you just said, while simultaneously thinking about what you're about to say, and still have the ability to tell Rambler that you need changes to be made. </p><p>Editing text that has already been pasted into the document, especially in such a large block like this, is not something that Rambler is very adept at doing. Sometimes it works, but in other cases it'll mess the whole thing up and that level of inconsistency is far from ideal. If Google just showed you what you said without having to paste it into the document, all of this could be avoided.</p><p>Naturally, the fact that it can automatically recognise what you're saying and format it appropriately before you even get to the editing stage is a big help. The way Gboard dictation used to be, you would just end up with huge blocks of text that needed punctuation scattered through it where appropriate—assuming you didn't physically say it while you were dictating.</p><p>You can still add your own punctuation when necessary. For instance, I'm very fond of using em-dashes in my work, while Gboard and Rambler are not. </p><p>Likewise, if I want to put something in quotation marks, I have to specifically ask for it, and this usually leads me to sprinkle in other punctuation throughout the piece as and where I deem it necessary, because we can't always trust AI to make the correct decisions for us.</p><h2 id="bottom-line">Bottom line</h2><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="eihE5mZLabJp3nTSac7Tt5" name="PXL_20260827_132030422" alt="google pixel 11 pro rambler" src="https://cdn.mos.cms.futurecdn.net/eihE5mZLabJp3nTSac7Tt5.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>Credit where it's due, Rambler is a huge improvement over other kinds of free voice dictation we've been getting bundled with our smartphones. I specifically mean the dictation services afforded by <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> and other Android devices through the Gboard app.</p><p>There are issues that people need to be aware of, and you do need to be vigilant about what Rambler is doing. Otherwise, like me, you could end up with huge chunks of your work just being erased because you accidentally said the wrong thing or it misunderstood what you actually wanted. </p><p>The editing commands could also be improved and the lack of a preview is quite an oversight on Google's part.</p><p>Rambler does have a pretty good grasp of what you're trying to say and the commands you're trying to give, but it does seem to be better suited for smaller blocks of text rather than feature-length articles like this one. The more text there is, the easier it is for things to start going wrong and the more likely it is that you're not going to notice them until it's far too late.</p><p>Still, if you find yourself in a situation where you can't type with both hands on your phone, or you simply prefer to express your thoughts verbally, even if you're sending an email or a text message, Rambler is actually doing a pretty good job and it is a massive improvement on what was available before. </p><p>Is it the best dictation software out there? I doubt it. There are probably premium options that do this sort of thing absolutely flawlessly, but for free software that is included on your phone's keyboard, it's doing a pretty good job so far. </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/ive-been-testing-pixel-11-pro-xl-for-a-week-heres-why-hilight-is-the-most-disappointing-new-feature">I've been testing Pixel 11 Pro XL for a week — here's why HiLight is the most disappointing new feature</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-tried-this-magsafe-game-controller-and-it-puts-other-bluetooth-gamepads-to-shame-plus-its-usd20-off-right-now">I tried this MagSafe game controller and it puts other Bluetooth gamepads to shame — plus it’s $20 off right now</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history">Samsung Galaxy S27 Ultra design leaked — and it could cause ‘the most intense wave of criticism in Galaxy history’</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/i-wrote-and-edited-this-article-with-pixel-11s-rambler-dictation-feature-and-things-did-not-go-according-to-plan</link>
                                                                            <description>
                            <![CDATA[ Rambler may be new and improved, but it still tried to delete half of this article for no good reason. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">d5BERH8WuLx8SfxKSjxEFT</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MptvEMzi6nPHrZvXFXngL6-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 28 Aug 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/MptvEMzi6nPHrZvXFXngL6-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[google pixel 11 pro rambler]]></media:description>                                                            <media:text><![CDATA[google pixel 11 pro rambler]]></media:text>
                                <media:title type="plain"><![CDATA[google pixel 11 pro rambler]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MptvEMzi6nPHrZvXFXngL6-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Earlier this year, I decided to <a href="https://www.tomsguide.com/phones/iphones/ios-27-beta-has-new-and-improved-dictation-software-i-tested-it-by-writing-this-whole-article-with-my-voice">try and write an article with my voice </a>sampling the different dictation software available on iPhones and Google Pixel phones. Both Apple and Google had been hyping up the capabilities of their new dictation software aided by brand new AI models. The results weren't awful, but they were fairly mixed.</p><p>At the time, Google had just announced the new Rambler AI dictation software but hadn't revealed exactly how it was going to roll out. Earlier this month, it <a href="https://blog.google/products-and-platforms/devices/pixel/pixel-11-features/" target="_blank">confirmed</a> that Rambler would be arriving on the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-review">Pixel 11</a> series, allowing a whole new kind of voice-to-text software that uses natural language AI to ensure the most accurate dictation possible — or so Google says.</p><p>Naturally, I decided to test the system and see if Rambler really does live up to Google's lofty claims. I was also curious to see whether the natural language systems would be capable of better understanding verbal commands and allow me to edit my work as I speak. Here's what happened.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XrgQxe"></div>                            </div>                            <script src="https://kwizly.com/embed/XrgQxe.js" async></script><h2 id="how-rambler-works">How Rambler 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:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YsFp6A2K9fYAXf3NYhvRL6" name="PXL_20260827_132007655" alt="google pixel 11 pro rambler" src="https://cdn.mos.cms.futurecdn.net/YsFp6A2K9fYAXf3NYhvRL6.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 Google's original <a href="https://blog.google/products-and-platforms/platforms/android/gemini-intelligence/" target="_blank">announcement</a> back at <a href="https://www.tomsguide.com/news/live/google-io-2026-live-news-updates">Google I/O in May</a>, Rambler is a way to ensure that users "don't have to worry about getting your words exactly right before you start.” It is designed for you to speak naturally to your phone and then use the AI to filter out all the unnecessary little parts of speech that you don't actually want transcribed. The ums, ahs and all the other verbal tics that you say without even thinking.</p><p>This essentially means that you can focus on what you're saying and the actual content of your work without having to worry about going back later and filtering out all those little things that would need to be removed later on.</p><p>Considering editing was the biggest issue I had with dictation software earlier this year, the idea that you could minimize that, or at the very least verbally make changes to text on the fly certainly piqued my curiosity.</p><p>Rambler is powered by <a href="https://www.tomsguide.com/ai/google-gemini/google-gemini-everything-you-need-to-know">Gemini AI</a>, and according to Google, it can understand multiple languages at once, allowing users who can speak multiple languages to switch between them as and when they see fit.</p><p>Google claims it's all about speed and accuracy, and Rambler is accessible at the top of your keyboard, replacing the old dictation functionality. While it originally launched on Pixel 11, Google has <a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-5-transcribe/" target="_blank">since confirmed</a> that it will be coming to Gboard on Android, Gemini on macOS, and the Chrome Browser.</p><h2 id="how-my-time-quot-typing-quot-with-rambler-is-going">How my time "typing" with Rambler is going</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xw9UTNvd4VWkG83zXjr4M6" name="PXL_20260827_132108496" alt="google pixel 11 pro rambler" src="https://cdn.mos.cms.futurecdn.net/xw9UTNvd4VWkG83zXjr4M6.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>So far I've been pretty impressed with how Rambler has done things. Not only has it been able to pick up what I'm saying with impressive clarity, it's also been able to do a lot of the formatting and punctuation without actually requiring me to specifically ask for it.</p><p>Generally speaking, as long as I can actually keep my words concise and my thoughts aligned, Rambler is having absolutely no issues with transcribing what I'm saying.</p><div><blockquote><p>As long as I can actually keep my words concise and my thoughts aligned, Rambler is having absolutely no issues with transcribing what I'm saying.</p></blockquote></div><p>Of course, the main limitation is that I'm not very good at doing that. I find it much easier to write or type than I do to speak, especially when that involves speaking off the cuff; organising my thoughts and relaying them to my own mouth in short order. This isn't a problem with Rambler itself; it's just how my brain works.</p><p>Then again, it feels like Google could have done a lot more to make the process a little bit smoother. When you start up Rambler, you get a little bar at the top of your keyboard that features a little visualisation based on what your microphone actually picks up. The more it hears, the higher the visualisation goes and so on. What Rambler doesn't include is a preview of what it has understood you've said, which makes organising your thoughts all the more difficult, especially if you try and correct a mistake mid-flow. </p><p>Having that preview would be a small improvement, but it would make a huge amount of difference, at least to me, in ensuring that I can continue my train of thought despite knowing that I just made a blunder or wanted to rewrite part of a sentence.</p><p>Despite the advances that Google has made with conversational AI and voice recognition, it is far from perfect — especially with relation to my own accent. For some reason, it recognised the word "other" as "are there" and "asking of it" as "asking for it." </p><p>Accent recognition has plagued voice control systems since their inception, and clearly more work needs to be done in this area.</p><h2 id="there-are-some-big-issues-that-need-addressing">There are some big issues that need addressing</h2><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="XdtoqUDagVmfr7jLUPviL6" name="PXL_20260827_132035025" alt="google pixel 11 pro rambler" src="https://cdn.mos.cms.futurecdn.net/XdtoqUDagVmfr7jLUPviL6.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>If anyone can tell, the previous paragraph was typed out from scratch, rather than using my voice. That's because attempting to get Rambler to edit and configure the text ended up wiping multiple paragraphs from this article for reasons I cannot understand. </p><p>Thankfully Google Docs was kind enough to let me undo those changes, but there were a lot of them, and my dedication to producing this article through voice alone meant I didn't notice for some time — and could have ended up losing about an hour of work in the process. If AI is supposed to make our lives better and improve productivity, it's going to have to avoid doing stupid things like this.</p><p>Anyway, back to using my voice, as promised.</p><p>Rambler can be used to edit what you've written, but in my brief time testing the feature it has been remarkably inconsistent. Obviously, that culminated in paragraphs of work being erased seemingly out of nowhere, but there have been instances where it seemingly struggles to understand what I'm trying to ask of it.</p><p>Naturally, the fact that there is no preview of what it has understood does make the editing process a little harder. You have to be able to memorise what you just said, while simultaneously thinking about what you're about to say, and still have the ability to tell Rambler that you need changes to be made. </p><p>Editing text that has already been pasted into the document, especially in such a large block like this, is not something that Rambler is very adept at doing. Sometimes it works, but in other cases it'll mess the whole thing up and that level of inconsistency is far from ideal. If Google just showed you what you said without having to paste it into the document, all of this could be avoided.</p><p>Naturally, the fact that it can automatically recognise what you're saying and format it appropriately before you even get to the editing stage is a big help. The way Gboard dictation used to be, you would just end up with huge blocks of text that needed punctuation scattered through it where appropriate—assuming you didn't physically say it while you were dictating.</p><p>You can still add your own punctuation when necessary. For instance, I'm very fond of using em-dashes in my work, while Gboard and Rambler are not. </p><p>Likewise, if I want to put something in quotation marks, I have to specifically ask for it, and this usually leads me to sprinkle in other punctuation throughout the piece as and where I deem it necessary, because we can't always trust AI to make the correct decisions for us.</p><h2 id="bottom-line">Bottom line</h2><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="eihE5mZLabJp3nTSac7Tt5" name="PXL_20260827_132030422" alt="google pixel 11 pro rambler" src="https://cdn.mos.cms.futurecdn.net/eihE5mZLabJp3nTSac7Tt5.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>Credit where it's due, Rambler is a huge improvement over other kinds of free voice dictation we've been getting bundled with our smartphones. I specifically mean the dictation services afforded by <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> and other Android devices through the Gboard app.</p><p>There are issues that people need to be aware of, and you do need to be vigilant about what Rambler is doing. Otherwise, like me, you could end up with huge chunks of your work just being erased because you accidentally said the wrong thing or it misunderstood what you actually wanted. </p><p>The editing commands could also be improved and the lack of a preview is quite an oversight on Google's part.</p><p>Rambler does have a pretty good grasp of what you're trying to say and the commands you're trying to give, but it does seem to be better suited for smaller blocks of text rather than feature-length articles like this one. The more text there is, the easier it is for things to start going wrong and the more likely it is that you're not going to notice them until it's far too late.</p><p>Still, if you find yourself in a situation where you can't type with both hands on your phone, or you simply prefer to express your thoughts verbally, even if you're sending an email or a text message, Rambler is actually doing a pretty good job and it is a massive improvement on what was available before. </p><p>Is it the best dictation software out there? I doubt it. There are probably premium options that do this sort of thing absolutely flawlessly, but for free software that is included on your phone's keyboard, it's doing a pretty good job so far. </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/ive-been-testing-pixel-11-pro-xl-for-a-week-heres-why-hilight-is-the-most-disappointing-new-feature">I've been testing Pixel 11 Pro XL for a week — here's why HiLight is the most disappointing new feature</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-tried-this-magsafe-game-controller-and-it-puts-other-bluetooth-gamepads-to-shame-plus-its-usd20-off-right-now">I tried this MagSafe game controller and it puts other Bluetooth gamepads to shame — plus it’s $20 off right now</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history">Samsung Galaxy S27 Ultra design leaked — and it could cause ‘the most intense wave of criticism in Galaxy history’</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 review: Lackluster upgrades that cost $100 more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I was so enamored with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> when I reviewed it last year that I didn't hesitate to call it the biggest update to the series in years — going as far as to say it was without question my favorite Pixel in the lineup at the time. It was a massive leap forward over the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Pixel 9</a>, thanks to meaningful hardware additions like a dedicated telephoto camera, noticeably brighter display, and a slew of helpful AI features that made daily use a breeze.</p><p>With the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a>, however, Google is raising the stakes — and the price tag — by asking for $100 more. At this new premium, I have higher expectations for a return given that steeper upfront cost. Quite frankly, it needs the upgraded hardware and day-to-day performance to back it up.</p><p>In my Pixel 11 review, I’ll break down whether these newest additions truly justify the higher cost or if it’s a pass.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><h2 class="article-body__section" id="section-google-pixel-11-review-cheat-sheet"><span>Google Pixel 11 review: Cheat sheet</span></h2><ul><li><strong>What is it? </strong>Google’s standard flagship phone for 2026, serving as the successor to last year’s Pixel 10 while offering top-tier hardware for a little less money than the Pros.</li><li><strong>Who is it for? </strong>Buyers who want the pure Android experience with helpful AI features that make daily tasks a breeze in a more compact form factor — especially those who don't want to pay $1,000 for a flagship.</li><li><strong>What does it cost?</strong> Pricing starts at $899 for the 128GB base storage configuration, reflecting a $100 price increase over the previous model.</li><li><strong>What do we like?</strong> An even brighter Actua display that holds up in direct sunlight, expanded camera tools, helpful new AI features, and a noticeably thinner camera plateau.</li><li><strong>What don’t we like? </strong>The $100 price hike is tough to swallow given the minimal year-over-year hardware upgrades, Tensor G6 performance still lags behind rivals, and battery endurance remains mostly middle-of-the-road.</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Y8WUkZf9Xrmnc6LuWgYsBG" name="Google Pixel 11 review" alt="Google Pixel 11 held in the hand." src="https://cdn.mos.cms.futurecdn.net/Y8WUkZf9Xrmnc6LuWgYsBG.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: John Velasco / Tom's Guide)</span></figcaption></figure><h2 class="article-body__section" id="section-google-pixel-11-review-specifications"><span>Google Pixel 11 review: Specifications</span></h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Google Pixel 11</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$899 / AU$1,499</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3-inch 1,080 x 2,424 Actua Display (OLED)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>60-120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP (f/1.7) main, 13MP (f/2.2) ultrawide, 10.8MP (f/3.1) telephoto w/5x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>10.5MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,985 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speeds</strong></p></td><td  ><p>30W wired, 25W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Construction Rating</strong></p></td><td  ><p>IP68</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6 x 2.8 x 0.3 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>6.9 ounces / 197g</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Frost, Pistachio, Hibiscus, Obsidian</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-google-pixel-11-review-the-ups"><span>Google Pixel 11 review: The ups</span></h2><h3 class="article-body__section" id="section-a-much-brighter-display"><span>A much brighter display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Zai8bPJHXCUwFPSd6VpQJG" name="Google Pixel 11 review" alt="Google Pixel 11 streaming 4K HDR video." src="https://cdn.mos.cms.futurecdn.net/Zai8bPJHXCUwFPSd6VpQJG.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>On paper, the screen doesn’t seem any different from before — a 6.3-inch Actua display — but don’t be fooled, as it packs a serious brightness boost.</p><p>Outdoor visibility gets a noticeable lift this year, backed up by solid numbers in our lab testing. This OLED panel reaches a peak brightness of 2,480 nits, up from the Pixel 10’s 2,333-nit peak rating. Whether I’m streaming rich 4K video or previewing high-contrast photos I’ve shot outdoors, this display delivers punchy highlights and excellent clarity without washing out details.</p><h3 class="article-body__section" id="section-helpful-ai-features"><span>Helpful AI features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MGecsSdNsz57zBsaCBuDMG" name="Google Pixel 11 review" alt="Google Pixel 11 review." src="https://cdn.mos.cms.futurecdn.net/MGecsSdNsz57zBsaCBuDMG.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Despite the hardware upgrades being more subtle this time around, Google continues to take the lead when it comes to delivering some of the best AI features around. </p><p>Gemini is integrated more deeply into daily workflows, and that’s what I continue to love about its <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-asked-gemini-on-the-galaxy-s26-to-order-dunkin-donuts-for-me-and-24-minutes-later-it-got-delivered-to-my-door">task automation feature</a>, which now extends to even more third-party apps than when I first tried it on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a>. In fact, I asked Gemini to find and book dinner reservations at a nearby restaurant — and it handled everything seamlessly up until the final step, leaving only the booking confirmation to me.</p><p>Everyday assistance also feels considerably more intuitive thanks to Proactive Assistance, which intelligently surfaces contextual information right when I need it — like suggesting showtimes and calendar invites when friends mention a movie night in a group chat.</p><p>I’m even finding myself typing messages less frequently because Rambler, a new voice dictation tool in Gboard, is smart enough to filter out all the imperfections in natural speech, including filler words like "ums" and "ahs." Together, they prove once again that Google’s AI features are built around practical utility rather than gimmicks.  </p><h3 class="article-body__section" id="section-thinner-camera-plateau"><span>Thinner camera plateau</span></h3><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="wm7TAaqyexnicFGQrCmqpE" name="Google Pixel 11 review" alt="Google Pixel 11 camera cutout." src="https://cdn.mos.cms.futurecdn.net/wm7TAaqyexnicFGQrCmqpE.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Google’s signature camera cutout gets a much-welcomed refinement this year, slimming down so it isn't nearly as raised as before. Personally, I like how the elongated cutout accentuates the camera setup, but this subtle redesign positions the housing significantly closer to the back glass.</p><p>While it’s still technically raised, pairing it with Google’s official case makes the plateau sit completely flush with the rest of the phone — leaving the back entirely flat.</p><h3 class="article-body__section" id="section-more-camera-tools-for-creators"><span>More Camera tools for creators</span></h3><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="2H2Bu6o9MFaHoAQp6uuFRG" name="Google Pixel 11 review" alt="Google Pixel 11 used to take a photo." src="https://cdn.mos.cms.futurecdn.net/2H2Bu6o9MFaHoAQp6uuFRG.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>The Pixel lineup has consistently delivered some of the best camera phones around, and despite the hardware remaining mostly unchanged this year, Google adds even more tools for creators. Leading the charge is Magic Capture, which lets me shoot video while automatically analyzing every frame to extract picture-perfect snapshots — like catching bright smiles right in the moment.</p><p>Camera Looks allows me to bypass aggressive post-processing enhancements in favor of a specific aesthetic, applying distinct photographic styles that I can easily dial up or tone down to my liking.</p><p>Finally, vloggers and content creators will find the new Creator Suite within the camera app especially handy. It bundles social media framing gridlines, a live audio visualizer, upgraded Speech Enhancement, and my personal favorite, an in-camera teleprompter, making video recording feel far more seamless.</p><h2 class="article-body__section" id="section-google-pixel-11-review-the-downs"><span>Google Pixel 11 review: The downs</span></h2><h3 class="article-body__section" id="section-tensor-g6-continues-to-underperform"><span>Tensor G6 continues to underperform</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11</strong></p></td><td  ><p><strong>Google Pixel 10</strong></p></td><td  ><p><strong>Samsung Galaxy S26</strong></p></td><td  ><p><strong>iPhone 17</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G5</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td><td  ><p>A19</p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench (single core/multicore)</strong></p></td><td  ><p>2,664 / 7,347</p></td><td  ><p>2,345 / 6,581</p></td><td  ><p>3,531 / 10,778</p></td><td  ><p>3,701 / 9,460</p></td></tr><tr><td class="firstcol " ><p><strong>WildLife Original Unlimited( fps)</strong></p></td><td  ><p>84.28</p></td><td  ><p>80.58</p></td><td  ><p>171.6</p></td><td  ><p>130.97</p></td></tr></tbody></table></div><p>While Google’s Tensor silicon has never been about topping benchmark charts, the Tensor G6 powering the Pixel 11 still trails its main rivals like the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a>.</p><p>In Geekbench 6, it averaged a single-core score of 2,664 and 7,347 with multicore — only a marginal boost over the Pixel 10’s scores. Don’t get me wrong: the phone still feels exceptionally fluid navigating around the interface and running Google’s on-device AI models, but the fact that these scores remain nowhere near competing top-tier chips is still disappointing.</p><p>Graphics testing paints a similar story, with the Pixel 11 posting an average overall score of 14,074 and an average frame rate of 84.28 fps in 3DMark Wild Life Unlimited. It’s capable enough for mainstream gaming, including titles I frequently play like Diablo Immortal and Age of Origins, but power users looking for bleeding-edge frame rates will notice the performance gap.</p><h3 class="article-body__section" id="section-flat-battery-life"><span>Flat battery life</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11</strong></p></td><td  ><p><strong>Google Pixel 10</strong></p></td><td  ><p><strong>Samsung Galaxy S26</strong></p></td><td  ><p><strong>iPhone 17</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>4,985 mAh</p></td><td  ><p>4,970 mAh</p></td><td  ><p>4,300 mAh</p></td><td  ><p>N/A</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Life (Hrs:Mins)</strong></p></td><td  ><p>12:45</p></td><td  ><p>13:13</p></td><td  ><p>11:28</p></td><td  ><p>12:47</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speed</strong></p></td><td  ><p>30W</p></td><td  ><p>30W </p></td><td  ><p>25W</p></td><td  ><p>29W</p></td></tr><tr><td class="firstcol " ><p><strong>Charge % after 30 minutes</strong></p></td><td  ><p>52%</p></td><td  ><p>52%</p></td><td  ><p>57%</p></td><td  ><p>71%</p></td></tr></tbody></table></div><p>After putting the Pixel 11 through the Tom’s Guide battery drain test, I’m honestly underwhelmed by the results, as endurance stays firmly in place rather than taking a meaningful step forward. </p><p>Its average time of 12 hours and 45 minutes is actually a step down from the 13 hours and 13 minutes posted by last year's Pixel 10. Although I still find it sufficient in my real-world use — easily powering me through a typical workday — it could've been better. At least it still pulls in longer endurance than other flagships, but it does benefit from a much larger battery capacity.</p><p>Charging speeds are equally stagnant, reaching just 27% in 15 minutes and 52% after 30 minutes using a standard charger. On the plus side, Google’s magnetic PixelSnap feature is still here, offering seamless alignment for Qi2 wireless chargers and full compatibility with all of my favorite magnetic accessories.</p><h3 class="article-body__section" id="section-no-major-camera-improvements"><span>No major camera improvements</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7aouCu5GP93L2n3pYy9xCh.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/yBqtYvZJ4xBkQqVB9gXgDY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/cvbDrRqAEwpsU3NihkJ26h.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/tko5W2jECLpkRm4aVkJXCY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/AeecSuAKH8oxhSUSh85tAh.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/udpoWw6deiDznCa9CCabGY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/oxyuiQxAGHGCReassMvTzg.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ugz5SwvtuNp6NwD9MkPYDY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RhV6ntMFWXcPXJrNDeCn6h.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YtSprUiDDMmMS3BBxyX4HY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/HWbiuxBvENEMRoSGAetQ6h.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vZcoGmJCwKhEJr5HSktKEY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/yDEnwo9wNHudtt6JSUQ74h.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kRWueEdUybmKf7tqL6DV9Y.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/N5YykRdRTKA4xKBxYi4Aof.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8ZX6Kyd5UQqUEc7jJKSgnX.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/d6VBUyWWkHxtF4KUC9Wa2h.jpg" alt="Google Pixel 11 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/yNahutpvMK4HRnh2TPCg2Y.jpg" alt="Google Pixel 10 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/s3fQ4Kmy3xK7fnpnsVsjtf.jpg" alt="Google Pixel 11 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8EwvwXYDZoDprnkxLT5PJX.jpg" alt="Google Pixel 10 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6dWaPPyFKG5V7CmutSqFxf.jpg" alt="Google Pixel 11 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JRcXMS274q8py3ZdQ8FtNX.jpg" alt="Google Pixel 10 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WeVb3n2rqRdtMxGHAUB4Lg.jpg" alt="Google Pixel 11 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/DHJabdkKBgyN2FTJFeBKNX.jpg" alt="Google Pixel 10 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>There’s no denying that the Pixel 10 was a dramatic leap last year, introducing a dedicated telephoto lens to the baseline flagship for the first time. However, the Pixel 11’s triple camera setup doesn’t move the needle all that much for me — carrying over a 48MP main shooter, 13MP ultrawide, and a 10.8MP telephoto with 5x optical zoom.</p><p>Side-by-side shots I’ve captured against the Pixel 10 look nearly identical across most everyday shooting scenarios, delivering virtually the same contrast, color rendition, and fine detail across the sensors.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/kXWPT8q2S8iJ7p4ymz3Nif.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/fhzNwCJCRqo6w82VEAmAGX.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Le9EaHpScreXHk4xPyt9of.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/msQbsMRNpM5JcQ8JoQGFdX.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5FxHskv3qstbuWZe6UUB9g.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/FmE7dAgRF2aAzLB7Mt7QmX.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gxAYHET6epD8qFV8pt29sf.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/mXAyoq9gYW5KJx2ij2MaNX.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8Q2EcpYxp8d5Z74evw7w2h.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YQJDJtiZdRNbRf28TYhF9X.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/LZN3R4Lqi8mc47GxJmFuQf.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gu5tTeWDUyr32RZAGDH2vW.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>The only subtle distinction surfaces in low-light conditions, where the updated Night Sight processing produces slightly darker, more underexposed frames compared to the brighter exposures of the Pixel 10. The tradeoff, however, is a noticeably cleaner image with less visible digital noise in shadowy areas.</p><h3 class="article-body__section" id="section-100-price-hike"><span>$100 price hike</span></h3><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="UjaSzDBS6KwEWk7t2HRpND" name="Google Pixel 11 review" alt="Google Pixel 11 held in the hand." src="https://cdn.mos.cms.futurecdn.net/UjaSzDBS6KwEWk7t2HRpND.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>At a starting price of $899, the Pixel 11 represents a 12.5% price increase over the Pixel 10’s $799 launch tag — a hike that I think is hard to justify given how minimal the gains are.</p><p>For an extra $100, you’re primarily getting a brighter display, minor low-light noise tweaks, and software features that could very well trickle down to older hardware in future Pixel Drops. With processor performance, battery life, and core camera hardware remaining largely static, the added cost simply doesn’t deliver a matching leap in value.</p><p>In fact, if you can find the Pixel 10 discounted at retailers or carrier promotions, it remains the smarter buy.</p><h2 class="article-body__section" id="section-google-pixel-11-review-verdict"><span>Google Pixel 11 review: Verdict</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/uNFk7CeDQjQZSdAnssJcgF.jpg" alt="Google Pixel 11 review." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>The Pixel 11 is a solid Android phone, but it doesn’t quite match the excitement I had for its predecessor. The biggest incentives to pick one up are undeniably the smarter Gemini AI capabilities and handy new camera tools, both of which genuinely elevate daily use. While there are a few welcome hardware refinements, like a brighter display and a slimmer camera plateau, the generational leap isn't nearly as dramatic as what I saw with the Pixel 10.</p><p>When you factor in the $100 price hike, the value proposition takes a hit. If you're currently holding onto a Pixel 9 or an older device, the Pixel 11 offers a rewarding step up in camera versatility, screen quality, and on-device intelligence. But if you already own a Pixel 10, there simply aren't enough hardware gains here to justify the upgrade cost.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WQwqNX"></div>                            </div>                            <script src="https://kwizly.com/embed/WQwqNX.js" async></script> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-review</link>
                                                                            <description>
                            <![CDATA[ The Pixel 11 continues to bring the best AI features around, powered by Gemini, but it lacks the hardware upgrades and performance improvements to back up its $100 price increase. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">pVXCHZHhLxcqAFcDcyaHNX</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AeXRAreNJRDRerT6NSuHNG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 27 Aug 2026 08:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 27 Aug 2026 08:32:15 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.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/AeXRAreNJRDRerT6NSuHNG-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 review.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 review.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 review.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AeXRAreNJRDRerT6NSuHNG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I was so enamored with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> when I reviewed it last year that I didn't hesitate to call it the biggest update to the series in years — going as far as to say it was without question my favorite Pixel in the lineup at the time. It was a massive leap forward over the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Pixel 9</a>, thanks to meaningful hardware additions like a dedicated telephoto camera, noticeably brighter display, and a slew of helpful AI features that made daily use a breeze.</p><p>With the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a>, however, Google is raising the stakes — and the price tag — by asking for $100 more. At this new premium, I have higher expectations for a return given that steeper upfront cost. Quite frankly, it needs the upgraded hardware and day-to-day performance to back it up.</p><p>In my Pixel 11 review, I’ll break down whether these newest additions truly justify the higher cost or if it’s a pass.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><h2 class="article-body__section" id="section-google-pixel-11-review-cheat-sheet"><span>Google Pixel 11 review: Cheat sheet</span></h2><ul><li><strong>What is it? </strong>Google’s standard flagship phone for 2026, serving as the successor to last year’s Pixel 10 while offering top-tier hardware for a little less money than the Pros.</li><li><strong>Who is it for? </strong>Buyers who want the pure Android experience with helpful AI features that make daily tasks a breeze in a more compact form factor — especially those who don't want to pay $1,000 for a flagship.</li><li><strong>What does it cost?</strong> Pricing starts at $899 for the 128GB base storage configuration, reflecting a $100 price increase over the previous model.</li><li><strong>What do we like?</strong> An even brighter Actua display that holds up in direct sunlight, expanded camera tools, helpful new AI features, and a noticeably thinner camera plateau.</li><li><strong>What don’t we like? </strong>The $100 price hike is tough to swallow given the minimal year-over-year hardware upgrades, Tensor G6 performance still lags behind rivals, and battery endurance remains mostly middle-of-the-road.</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Y8WUkZf9Xrmnc6LuWgYsBG" name="Google Pixel 11 review" alt="Google Pixel 11 held in the hand." src="https://cdn.mos.cms.futurecdn.net/Y8WUkZf9Xrmnc6LuWgYsBG.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: John Velasco / Tom's Guide)</span></figcaption></figure><h2 class="article-body__section" id="section-google-pixel-11-review-specifications"><span>Google Pixel 11 review: Specifications</span></h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Google Pixel 11</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$899 / AU$1,499</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3-inch 1,080 x 2,424 Actua Display (OLED)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>60-120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP (f/1.7) main, 13MP (f/2.2) ultrawide, 10.8MP (f/3.1) telephoto w/5x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>10.5MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,985 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speeds</strong></p></td><td  ><p>30W wired, 25W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Construction Rating</strong></p></td><td  ><p>IP68</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6 x 2.8 x 0.3 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>6.9 ounces / 197g</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Frost, Pistachio, Hibiscus, Obsidian</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-google-pixel-11-review-the-ups"><span>Google Pixel 11 review: The ups</span></h2><h3 class="article-body__section" id="section-a-much-brighter-display"><span>A much brighter display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Zai8bPJHXCUwFPSd6VpQJG" name="Google Pixel 11 review" alt="Google Pixel 11 streaming 4K HDR video." src="https://cdn.mos.cms.futurecdn.net/Zai8bPJHXCUwFPSd6VpQJG.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>On paper, the screen doesn’t seem any different from before — a 6.3-inch Actua display — but don’t be fooled, as it packs a serious brightness boost.</p><p>Outdoor visibility gets a noticeable lift this year, backed up by solid numbers in our lab testing. This OLED panel reaches a peak brightness of 2,480 nits, up from the Pixel 10’s 2,333-nit peak rating. Whether I’m streaming rich 4K video or previewing high-contrast photos I’ve shot outdoors, this display delivers punchy highlights and excellent clarity without washing out details.</p><h3 class="article-body__section" id="section-helpful-ai-features"><span>Helpful AI features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MGecsSdNsz57zBsaCBuDMG" name="Google Pixel 11 review" alt="Google Pixel 11 review." src="https://cdn.mos.cms.futurecdn.net/MGecsSdNsz57zBsaCBuDMG.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Despite the hardware upgrades being more subtle this time around, Google continues to take the lead when it comes to delivering some of the best AI features around. </p><p>Gemini is integrated more deeply into daily workflows, and that’s what I continue to love about its <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-asked-gemini-on-the-galaxy-s26-to-order-dunkin-donuts-for-me-and-24-minutes-later-it-got-delivered-to-my-door">task automation feature</a>, which now extends to even more third-party apps than when I first tried it on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a>. In fact, I asked Gemini to find and book dinner reservations at a nearby restaurant — and it handled everything seamlessly up until the final step, leaving only the booking confirmation to me.</p><p>Everyday assistance also feels considerably more intuitive thanks to Proactive Assistance, which intelligently surfaces contextual information right when I need it — like suggesting showtimes and calendar invites when friends mention a movie night in a group chat.</p><p>I’m even finding myself typing messages less frequently because Rambler, a new voice dictation tool in Gboard, is smart enough to filter out all the imperfections in natural speech, including filler words like "ums" and "ahs." Together, they prove once again that Google’s AI features are built around practical utility rather than gimmicks.  </p><h3 class="article-body__section" id="section-thinner-camera-plateau"><span>Thinner camera plateau</span></h3><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="wm7TAaqyexnicFGQrCmqpE" name="Google Pixel 11 review" alt="Google Pixel 11 camera cutout." src="https://cdn.mos.cms.futurecdn.net/wm7TAaqyexnicFGQrCmqpE.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Google’s signature camera cutout gets a much-welcomed refinement this year, slimming down so it isn't nearly as raised as before. Personally, I like how the elongated cutout accentuates the camera setup, but this subtle redesign positions the housing significantly closer to the back glass.</p><p>While it’s still technically raised, pairing it with Google’s official case makes the plateau sit completely flush with the rest of the phone — leaving the back entirely flat.</p><h3 class="article-body__section" id="section-more-camera-tools-for-creators"><span>More Camera tools for creators</span></h3><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="2H2Bu6o9MFaHoAQp6uuFRG" name="Google Pixel 11 review" alt="Google Pixel 11 used to take a photo." src="https://cdn.mos.cms.futurecdn.net/2H2Bu6o9MFaHoAQp6uuFRG.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>The Pixel lineup has consistently delivered some of the best camera phones around, and despite the hardware remaining mostly unchanged this year, Google adds even more tools for creators. Leading the charge is Magic Capture, which lets me shoot video while automatically analyzing every frame to extract picture-perfect snapshots — like catching bright smiles right in the moment.</p><p>Camera Looks allows me to bypass aggressive post-processing enhancements in favor of a specific aesthetic, applying distinct photographic styles that I can easily dial up or tone down to my liking.</p><p>Finally, vloggers and content creators will find the new Creator Suite within the camera app especially handy. It bundles social media framing gridlines, a live audio visualizer, upgraded Speech Enhancement, and my personal favorite, an in-camera teleprompter, making video recording feel far more seamless.</p><h2 class="article-body__section" id="section-google-pixel-11-review-the-downs"><span>Google Pixel 11 review: The downs</span></h2><h3 class="article-body__section" id="section-tensor-g6-continues-to-underperform"><span>Tensor G6 continues to underperform</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11</strong></p></td><td  ><p><strong>Google Pixel 10</strong></p></td><td  ><p><strong>Samsung Galaxy S26</strong></p></td><td  ><p><strong>iPhone 17</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G5</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td><td  ><p>A19</p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench (single core/multicore)</strong></p></td><td  ><p>2,664 / 7,347</p></td><td  ><p>2,345 / 6,581</p></td><td  ><p>3,531 / 10,778</p></td><td  ><p>3,701 / 9,460</p></td></tr><tr><td class="firstcol " ><p><strong>WildLife Original Unlimited( fps)</strong></p></td><td  ><p>84.28</p></td><td  ><p>80.58</p></td><td  ><p>171.6</p></td><td  ><p>130.97</p></td></tr></tbody></table></div><p>While Google’s Tensor silicon has never been about topping benchmark charts, the Tensor G6 powering the Pixel 11 still trails its main rivals like the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a>.</p><p>In Geekbench 6, it averaged a single-core score of 2,664 and 7,347 with multicore — only a marginal boost over the Pixel 10’s scores. Don’t get me wrong: the phone still feels exceptionally fluid navigating around the interface and running Google’s on-device AI models, but the fact that these scores remain nowhere near competing top-tier chips is still disappointing.</p><p>Graphics testing paints a similar story, with the Pixel 11 posting an average overall score of 14,074 and an average frame rate of 84.28 fps in 3DMark Wild Life Unlimited. It’s capable enough for mainstream gaming, including titles I frequently play like Diablo Immortal and Age of Origins, but power users looking for bleeding-edge frame rates will notice the performance gap.</p><h3 class="article-body__section" id="section-flat-battery-life"><span>Flat battery life</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11</strong></p></td><td  ><p><strong>Google Pixel 10</strong></p></td><td  ><p><strong>Samsung Galaxy S26</strong></p></td><td  ><p><strong>iPhone 17</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>4,985 mAh</p></td><td  ><p>4,970 mAh</p></td><td  ><p>4,300 mAh</p></td><td  ><p>N/A</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Life (Hrs:Mins)</strong></p></td><td  ><p>12:45</p></td><td  ><p>13:13</p></td><td  ><p>11:28</p></td><td  ><p>12:47</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speed</strong></p></td><td  ><p>30W</p></td><td  ><p>30W </p></td><td  ><p>25W</p></td><td  ><p>29W</p></td></tr><tr><td class="firstcol " ><p><strong>Charge % after 30 minutes</strong></p></td><td  ><p>52%</p></td><td  ><p>52%</p></td><td  ><p>57%</p></td><td  ><p>71%</p></td></tr></tbody></table></div><p>After putting the Pixel 11 through the Tom’s Guide battery drain test, I’m honestly underwhelmed by the results, as endurance stays firmly in place rather than taking a meaningful step forward. </p><p>Its average time of 12 hours and 45 minutes is actually a step down from the 13 hours and 13 minutes posted by last year's Pixel 10. Although I still find it sufficient in my real-world use — easily powering me through a typical workday — it could've been better. At least it still pulls in longer endurance than other flagships, but it does benefit from a much larger battery capacity.</p><p>Charging speeds are equally stagnant, reaching just 27% in 15 minutes and 52% after 30 minutes using a standard charger. On the plus side, Google’s magnetic PixelSnap feature is still here, offering seamless alignment for Qi2 wireless chargers and full compatibility with all of my favorite magnetic accessories.</p><h3 class="article-body__section" id="section-no-major-camera-improvements"><span>No major camera improvements</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7aouCu5GP93L2n3pYy9xCh.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/yBqtYvZJ4xBkQqVB9gXgDY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/cvbDrRqAEwpsU3NihkJ26h.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/tko5W2jECLpkRm4aVkJXCY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/AeecSuAKH8oxhSUSh85tAh.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/udpoWw6deiDznCa9CCabGY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/oxyuiQxAGHGCReassMvTzg.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ugz5SwvtuNp6NwD9MkPYDY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RhV6ntMFWXcPXJrNDeCn6h.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YtSprUiDDMmMS3BBxyX4HY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/HWbiuxBvENEMRoSGAetQ6h.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vZcoGmJCwKhEJr5HSktKEY.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/yDEnwo9wNHudtt6JSUQ74h.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kRWueEdUybmKf7tqL6DV9Y.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/N5YykRdRTKA4xKBxYi4Aof.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8ZX6Kyd5UQqUEc7jJKSgnX.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/d6VBUyWWkHxtF4KUC9Wa2h.jpg" alt="Google Pixel 11 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/yNahutpvMK4HRnh2TPCg2Y.jpg" alt="Google Pixel 10 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/s3fQ4Kmy3xK7fnpnsVsjtf.jpg" alt="Google Pixel 11 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8EwvwXYDZoDprnkxLT5PJX.jpg" alt="Google Pixel 10 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6dWaPPyFKG5V7CmutSqFxf.jpg" alt="Google Pixel 11 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JRcXMS274q8py3ZdQ8FtNX.jpg" alt="Google Pixel 10 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WeVb3n2rqRdtMxGHAUB4Lg.jpg" alt="Google Pixel 11 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/DHJabdkKBgyN2FTJFeBKNX.jpg" alt="Google Pixel 10 camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>There’s no denying that the Pixel 10 was a dramatic leap last year, introducing a dedicated telephoto lens to the baseline flagship for the first time. However, the Pixel 11’s triple camera setup doesn’t move the needle all that much for me — carrying over a 48MP main shooter, 13MP ultrawide, and a 10.8MP telephoto with 5x optical zoom.</p><p>Side-by-side shots I’ve captured against the Pixel 10 look nearly identical across most everyday shooting scenarios, delivering virtually the same contrast, color rendition, and fine detail across the sensors.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/kXWPT8q2S8iJ7p4ymz3Nif.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/fhzNwCJCRqo6w82VEAmAGX.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Le9EaHpScreXHk4xPyt9of.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/msQbsMRNpM5JcQ8JoQGFdX.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5FxHskv3qstbuWZe6UUB9g.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/FmE7dAgRF2aAzLB7Mt7QmX.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gxAYHET6epD8qFV8pt29sf.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/mXAyoq9gYW5KJx2ij2MaNX.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8Q2EcpYxp8d5Z74evw7w2h.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YQJDJtiZdRNbRf28TYhF9X.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/LZN3R4Lqi8mc47GxJmFuQf.jpg" alt="Google Pixel 11 camera sample." /><figcaption>Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gu5tTeWDUyr32RZAGDH2vW.jpg" alt="Google Pixel 10 camera sample." /><figcaption>Pixel 10.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>The only subtle distinction surfaces in low-light conditions, where the updated Night Sight processing produces slightly darker, more underexposed frames compared to the brighter exposures of the Pixel 10. The tradeoff, however, is a noticeably cleaner image with less visible digital noise in shadowy areas.</p><h3 class="article-body__section" id="section-100-price-hike"><span>$100 price hike</span></h3><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="UjaSzDBS6KwEWk7t2HRpND" name="Google Pixel 11 review" alt="Google Pixel 11 held in the hand." src="https://cdn.mos.cms.futurecdn.net/UjaSzDBS6KwEWk7t2HRpND.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>At a starting price of $899, the Pixel 11 represents a 12.5% price increase over the Pixel 10’s $799 launch tag — a hike that I think is hard to justify given how minimal the gains are.</p><p>For an extra $100, you’re primarily getting a brighter display, minor low-light noise tweaks, and software features that could very well trickle down to older hardware in future Pixel Drops. With processor performance, battery life, and core camera hardware remaining largely static, the added cost simply doesn’t deliver a matching leap in value.</p><p>In fact, if you can find the Pixel 10 discounted at retailers or carrier promotions, it remains the smarter buy.</p><h2 class="article-body__section" id="section-google-pixel-11-review-verdict"><span>Google Pixel 11 review: Verdict</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/uNFk7CeDQjQZSdAnssJcgF.jpg" alt="Google Pixel 11 review." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>The Pixel 11 is a solid Android phone, but it doesn’t quite match the excitement I had for its predecessor. The biggest incentives to pick one up are undeniably the smarter Gemini AI capabilities and handy new camera tools, both of which genuinely elevate daily use. While there are a few welcome hardware refinements, like a brighter display and a slimmer camera plateau, the generational leap isn't nearly as dramatic as what I saw with the Pixel 10.</p><p>When you factor in the $100 price hike, the value proposition takes a hit. If you're currently holding onto a Pixel 9 or an older device, the Pixel 11 offers a rewarding step up in camera versatility, screen quality, and on-device intelligence. But if you already own a Pixel 10, there simply aren't enough hardware gains here to justify the upgrade cost.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WQwqNX"></div>                            </div>                            <script src="https://kwizly.com/embed/WQwqNX.js" async></script>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've been testing Pixel 11 Pro XL for a week — here's why HiLight is the most disappointing new feature ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I'm not a big fan of the Pixel 11 Pro. As I mentioned in my <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro and Pixel 11 Pro XL review</a>, these are not bad phones but it feels as though Google hasn't done enough to help justify their existence. One of the few hardware changes the phones do include is the HiLight LED, which lives on the camera bar.</p><p>HiLight is part of the camera flash on the back of the Pixel 11 Pro, utilizing a range of colored LED lights. It's essentially a modern day take on the notification light smartphone companies mostly ditched years ago.</p><p>Unfortunately, the way HiLight works right now feels like a missed opportunity, but there is potential if Google is willing to put some effort into it.</p><h2 id="what-hilight-can-do">What HiLight can do</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uyViYWTbCkRQFAFL2a9fx" name="ezgif-1c9ee6d6e6605045" alt="pixel 11 pro hilight feature" src="https://cdn.mos.cms.futurecdn.net/uyViYWTbCkRQFAFL2a9fx.gif" mos="" align="middle" fullscreen="" width="800" height="450" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Looking at the back of the Pixel 11 Pro, you'd never know that HiLight was actually there. Though if you are familiar with Pixel phones you may recognize that the flash is totally different, with a smooth solid-colored surface rather than the fresnel-looking lens utilized on the likes of <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro</a>. </p><p>Here's how it works. When you place your phone face down, and whenever the right trigger occurs HiLight will flash one of six colors. Blue is reserved for <a href="https://www.tomsguide.com/ai/google-gemini">Google Gemini</a>, but at the moment the HiLight icon can also flash teal, yellow, magenta, purple and white. Unfortunately, the feature is limited in what it can actually do.</p><p>The way Google described HiLight, you might have assumed that it would support a bunch of different notification types. I know I did, but that isn't the case. As it stands, HiLight will only flash for two reasons. The light will flash blue whenever you're talking to Google Gemini, but it can also be set up to flash one of the five other colors when your starred contacts are calling you.</p><p>At the moment, that is all HiLight can do. Any other kind of notification is completely off limits, and there's no way to set up HiLight to flash up when you get an email, text message or something else entirely.</p><p>It's also worth noting that HiLight won't engage if your phone screen is not facing directly down. It doesn't have to be a flat surface, only that your phone screen is pointing towards the ground. In fact, you can test this yourself, because HiLight will actually turn off if you tilt your phone too far in any other direction.</p><h2 id="the-limitations-are-disappointing-but-it-didn-39-t-have-to-be-this-way">The limitations are disappointing — but it didn't have to be this 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:5739px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MUYMhHjP3v54WkbELp9e9W" name="Google Pixel 11 Pro XL-13" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/MUYMhHjP3v54WkbELp9e9W.jpg" mos="" align="middle" fullscreen="" width="5739" height="3228" 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 feels like Google has only done half a job with the way it's rolled out HiLight to the Pixel 11 Pro. The limited functionality means that the one thing that could have become the Pixel 11 Pro's standout feature is nearly pointless for me.</p><p>I can't tell you how many times my starred contacts actually bother to call me. Usually they send me a text message, or call me via WhatsApp — which is not compatible with HiLight.</p><p>Honestly, it feels like Google hasn't put a lot of effort into making HiLight a feature that people will actually get much benefit from. Everything about it is limited, from the compatibility to the color options.</p><p>Google did state that HiLight <a href="https://blog.google/products-and-platforms/devices/pixel/google-pixel-11-pro-xl/">will be updated</a> with more features at some point in the future, but the only specific detail we've been given is that HiLight will flash when you get messages from favored contacts. We just don't know when that might happen, or what further plans Google has in store for the feature.</p><p>App developers have been hard at work trying to crack the system behind HiLight and give users the freedom to utilize the LED however they want. One of them claims to have succeeded, which is crazy considering we're just a few short days out from the phones' official release.</p><h2 id="developers-step-in">Developers step in</h2><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="8Nb4Bg6NWTvZ3B9nWkeGrk" name="pixel1" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/8Nb4Bg6NWTvZ3B9nWkeGrk.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><a href="https://www.techradar.com/phones/google-pixel-phones/the-pixel-11-pros-hilight-led-is-bafflingly-limited-out-of-the-box-but-a-new-app-removes-its-shackles" target="_blank">HiLight Studio has garnered attention</a> for its bold claims, promising that users can control the rear-lights colors, and program the lights to activate with an even larger range of apps. I haven't been able to test it for myself, because the setup process is a lot more complicated than simply installing an APK file. This is a system level feature, after all, and it's not one that Google will want you messing with.</p><p>In other words, this is for people with patience and technical ability to get everything going. The fact that you need to relaunch the service every time your phone reboots is enough to put me off. </p><p>Still, it shows that HiLight is not necessarily limited to the few features Google has graced the Pixel 11 Pro with so far. It's a lot more versatile and potentially a lot more useful than I initially gave it credit for — or it could be.</p><h2 id="bottom-line-hilight-could-be-a-lot-better-than-it-is">Bottom line: HiLight could be a lot better than it is</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4212px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="HMWfzY6BdYCQwxLt3qZ2eV" name="Google Pixel 11 Pro XL-11" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/HMWfzY6BdYCQwxLt3qZ2eV.jpg" mos="" align="middle" fullscreen="" width="4212" height="2369" 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 can see potential in HiLight, and the ability to keep tabs on your notifications without constantly checking your phone screen. In an ideal world you could map different notifications to a veritable rainbow of different colors and use that to determine whether you should actually open up your phone or not.</p><p>But in its current state, HiLight is basically a non-starter. It's only compatible with two features, and while I understand why Gemini was chosen I have no idea why Google decided adding support for <em>phone calls</em> was a priority. Actually receiving a phone call is unusual enough that it grabs my attention, I don't need a colorful light to go with it.</p><p>HiLight could be something, but it's going to rely on Google actually rolling out a bunch of updates to improve the usefulness of the entire mechanism. But if things stay the way they are, it's just one more phone feature destined for the scrap heap.</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/apples-iphone-18-pro-launch-event-is-coming-but-dont-expect-these-5-products-to-appear">Apple's big September event is coming — but don't expect these 5 products</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Google Pixel 11 Pro Fold review: Falling behind the foldable curve</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-vs-iphone-18-pro-max-heres-the-one-im-putting-my-money-on">iPhone Ultra vs. iPhone 18 Pro Max: Here’s the one I’m putting my money on</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/ive-been-testing-pixel-11-pro-xl-for-a-week-heres-why-hilight-is-the-most-disappointing-new-feature</link>
                                                                            <description>
                            <![CDATA[ HiLight really highlights how disappointing the Pixel 11 Pro really is. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">WeLRbeNaW7frXBE9m2Y5d8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/A7BH3wKbnA66d9kq43NxzV-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 23 Aug 2026 06:30:00 +0000</pubDate>                                                                                                                                <updated>Sun, 23 Aug 2026 12:43:16 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/A7BH3wKbnA66d9kq43NxzV-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[pixel 11 pro and 11 pro xl review images]]></media:description>                                                            <media:text><![CDATA[pixel 11 pro and 11 pro xl review images]]></media:text>
                                <media:title type="plain"><![CDATA[pixel 11 pro and 11 pro xl review images]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/A7BH3wKbnA66d9kq43NxzV-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I'm not a big fan of the Pixel 11 Pro. As I mentioned in my <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro and Pixel 11 Pro XL review</a>, these are not bad phones but it feels as though Google hasn't done enough to help justify their existence. One of the few hardware changes the phones do include is the HiLight LED, which lives on the camera bar.</p><p>HiLight is part of the camera flash on the back of the Pixel 11 Pro, utilizing a range of colored LED lights. It's essentially a modern day take on the notification light smartphone companies mostly ditched years ago.</p><p>Unfortunately, the way HiLight works right now feels like a missed opportunity, but there is potential if Google is willing to put some effort into it.</p><h2 id="what-hilight-can-do">What HiLight can do</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uyViYWTbCkRQFAFL2a9fx" name="ezgif-1c9ee6d6e6605045" alt="pixel 11 pro hilight feature" src="https://cdn.mos.cms.futurecdn.net/uyViYWTbCkRQFAFL2a9fx.gif" mos="" align="middle" fullscreen="" width="800" height="450" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Looking at the back of the Pixel 11 Pro, you'd never know that HiLight was actually there. Though if you are familiar with Pixel phones you may recognize that the flash is totally different, with a smooth solid-colored surface rather than the fresnel-looking lens utilized on the likes of <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro</a>. </p><p>Here's how it works. When you place your phone face down, and whenever the right trigger occurs HiLight will flash one of six colors. Blue is reserved for <a href="https://www.tomsguide.com/ai/google-gemini">Google Gemini</a>, but at the moment the HiLight icon can also flash teal, yellow, magenta, purple and white. Unfortunately, the feature is limited in what it can actually do.</p><p>The way Google described HiLight, you might have assumed that it would support a bunch of different notification types. I know I did, but that isn't the case. As it stands, HiLight will only flash for two reasons. The light will flash blue whenever you're talking to Google Gemini, but it can also be set up to flash one of the five other colors when your starred contacts are calling you.</p><p>At the moment, that is all HiLight can do. Any other kind of notification is completely off limits, and there's no way to set up HiLight to flash up when you get an email, text message or something else entirely.</p><p>It's also worth noting that HiLight won't engage if your phone screen is not facing directly down. It doesn't have to be a flat surface, only that your phone screen is pointing towards the ground. In fact, you can test this yourself, because HiLight will actually turn off if you tilt your phone too far in any other direction.</p><h2 id="the-limitations-are-disappointing-but-it-didn-39-t-have-to-be-this-way">The limitations are disappointing — but it didn't have to be this 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:5739px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MUYMhHjP3v54WkbELp9e9W" name="Google Pixel 11 Pro XL-13" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/MUYMhHjP3v54WkbELp9e9W.jpg" mos="" align="middle" fullscreen="" width="5739" height="3228" 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 feels like Google has only done half a job with the way it's rolled out HiLight to the Pixel 11 Pro. The limited functionality means that the one thing that could have become the Pixel 11 Pro's standout feature is nearly pointless for me.</p><p>I can't tell you how many times my starred contacts actually bother to call me. Usually they send me a text message, or call me via WhatsApp — which is not compatible with HiLight.</p><p>Honestly, it feels like Google hasn't put a lot of effort into making HiLight a feature that people will actually get much benefit from. Everything about it is limited, from the compatibility to the color options.</p><p>Google did state that HiLight <a href="https://blog.google/products-and-platforms/devices/pixel/google-pixel-11-pro-xl/">will be updated</a> with more features at some point in the future, but the only specific detail we've been given is that HiLight will flash when you get messages from favored contacts. We just don't know when that might happen, or what further plans Google has in store for the feature.</p><p>App developers have been hard at work trying to crack the system behind HiLight and give users the freedom to utilize the LED however they want. One of them claims to have succeeded, which is crazy considering we're just a few short days out from the phones' official release.</p><h2 id="developers-step-in">Developers step in</h2><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="8Nb4Bg6NWTvZ3B9nWkeGrk" name="pixel1" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/8Nb4Bg6NWTvZ3B9nWkeGrk.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><a href="https://www.techradar.com/phones/google-pixel-phones/the-pixel-11-pros-hilight-led-is-bafflingly-limited-out-of-the-box-but-a-new-app-removes-its-shackles" target="_blank">HiLight Studio has garnered attention</a> for its bold claims, promising that users can control the rear-lights colors, and program the lights to activate with an even larger range of apps. I haven't been able to test it for myself, because the setup process is a lot more complicated than simply installing an APK file. This is a system level feature, after all, and it's not one that Google will want you messing with.</p><p>In other words, this is for people with patience and technical ability to get everything going. The fact that you need to relaunch the service every time your phone reboots is enough to put me off. </p><p>Still, it shows that HiLight is not necessarily limited to the few features Google has graced the Pixel 11 Pro with so far. It's a lot more versatile and potentially a lot more useful than I initially gave it credit for — or it could be.</p><h2 id="bottom-line-hilight-could-be-a-lot-better-than-it-is">Bottom line: HiLight could be a lot better than it is</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4212px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="HMWfzY6BdYCQwxLt3qZ2eV" name="Google Pixel 11 Pro XL-11" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/HMWfzY6BdYCQwxLt3qZ2eV.jpg" mos="" align="middle" fullscreen="" width="4212" height="2369" 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 can see potential in HiLight, and the ability to keep tabs on your notifications without constantly checking your phone screen. In an ideal world you could map different notifications to a veritable rainbow of different colors and use that to determine whether you should actually open up your phone or not.</p><p>But in its current state, HiLight is basically a non-starter. It's only compatible with two features, and while I understand why Gemini was chosen I have no idea why Google decided adding support for <em>phone calls</em> was a priority. Actually receiving a phone call is unusual enough that it grabs my attention, I don't need a colorful light to go with it.</p><p>HiLight could be something, but it's going to rely on Google actually rolling out a bunch of updates to improve the usefulness of the entire mechanism. But if things stay the way they are, it's just one more phone feature destined for the scrap heap.</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/apples-iphone-18-pro-launch-event-is-coming-but-dont-expect-these-5-products-to-appear">Apple's big September event is coming — but don't expect these 5 products</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Google Pixel 11 Pro Fold review: Falling behind the foldable curve</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-vs-iphone-18-pro-max-heres-the-one-im-putting-my-money-on">iPhone Ultra vs. iPhone 18 Pro Max: Here’s the one I’m putting my money on</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Get a Pixel 11 Pro, Pixel Watch 5 and Galaxy Tablet for free at Verizon: here's how to get yours ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The recently released Pixel 11 Pro faces some stiff competition when it comes to ranking in our <a href="https://www.tomsguide.com/best-picks/best-phones">best phone</a> of 2026 guide. Even our phones editor Tom Pritchard said you might be better off buying a Pixel 10 Pro. Verizon, however, is offering a deal no Pixel owner should miss. </p><p>For a limited time, <a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow">Verizon is offering the Pixel 11 Pro</a> for free with a new Unlimited plan. Even better, you'll get a <a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow">free Pixel Watch 5</a> and <a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow">free Galaxy Tab S10 FE 5G</a> with any Google phone purchase. That's one of the best <a href="https://www.tomsguide.com/phones/google-pixel-phones/best-google-pixel-11-and-pixel-11-pro-deals">Pixel 11 deals</a> I've seen. </p><div class="product"><a data-dimension112="2a826532-9d99-11f1-9589-07f99038ad33" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1239px;"><p class="vanilla-image-block" style="padding-top:121.07%;"><img id="FrEQh6QFhVjxEGTiUafDmn" name="Pixel 11 Pro deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FrEQh6QFhVjxEGTiUafDmn.jpg" mos="" align="middle" fullscreen="" width="1239" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="2a826532-9d99-11f1-9589-07f99038ad33" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" data-dimension25=""><strong>free w/ new line + unlimited @ Verizon</strong></a><br>Verizon is offering the Pixel 11 Pro for free when you purchase it with an Unlimited data plan. Plus, you'll get a free Pixel Watch 5 and Galaxy Tab S10 FE 5G with any Google phone purchase. The Pixel 11 Pro features a 6.3-inch Super Actua OLED display (1280 x 2856) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro review</a> we said the upgrades are minimal, but there are some excellent improvements to the camera. Just note that it comes with less RAM and weaker battery than its predecessor. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="2a826532-9d99-11f1-9589-07f99038ad33" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><p>In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro review</a>, we said Google's new phone is a good phone, but you should be aware of the compromises you'll need to make. First, it costs $100 more than the Pixel 10 Pro. The upside is that the new model comes with 256GB of storage instead of 128GB. However, the base Pixel 11 Pro's RAM has been downgraded from 16GB on its predecessor to just 12GB of the new Pixel 11 Pro. The cost of RAM has been skyrocketing and while we don't like that Google did this, we can at least understand why they did it.   </p><p>That said, the Pixel 11 Pro offers better cameras, AI features, and better overall performance than the Pixel 10 Pro. Not to mention you get a brighter display. So while we wouldn't recommend paying full price for the Pixel 11 Pro, we would absolutely recommend getting it for free at Verizon. Especially since it's bundled with the Pixel Watch 5 and a Galaxy tablet. Just remember that to get this deal you'll need to purchase your phone with a an Unlimited data plan. </p><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&rows=6&view_mode=savings_squad&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=${siteParam}&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (!this.activeDealTag && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 40px; min-height: 40px;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 36px; min-height: 36px;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/get-a-pixel-11-pro-pixel-watch-5-and-galaxy-tablet-for-free-at-verizon-heres-how-to-get-yours</link>
                                                                            <description>
                            <![CDATA[ Verizon is offering one of the best Google Pixel 11 deals around. Here's how you can score Google's new smartphones, a Pixel Watch 5, and Galaxy tablet for free. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mg27kJnQpxXKMAXE9PaAa9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VfY8oWsKzMXtneoSb8AUrc-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 21 Aug 2026 19:52:04 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more. He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac. &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&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/VfY8oWsKzMXtneoSb8AUrc-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Pixel 11 Pro and Pixel 11 Pro XL held in hand]]></media:description>                                                            <media:text><![CDATA[Pixel 11 Pro and Pixel 11 Pro XL held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Pixel 11 Pro and Pixel 11 Pro XL held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VfY8oWsKzMXtneoSb8AUrc-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The recently released Pixel 11 Pro faces some stiff competition when it comes to ranking in our <a href="https://www.tomsguide.com/best-picks/best-phones">best phone</a> of 2026 guide. Even our phones editor Tom Pritchard said you might be better off buying a Pixel 10 Pro. Verizon, however, is offering a deal no Pixel owner should miss. </p><p>For a limited time, <a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow">Verizon is offering the Pixel 11 Pro</a> for free with a new Unlimited plan. Even better, you'll get a <a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow">free Pixel Watch 5</a> and <a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow">free Galaxy Tab S10 FE 5G</a> with any Google phone purchase. That's one of the best <a href="https://www.tomsguide.com/phones/google-pixel-phones/best-google-pixel-11-and-pixel-11-pro-deals">Pixel 11 deals</a> I've seen. </p><div class="product"><a data-dimension112="2a826532-9d99-11f1-9589-07f99038ad33" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1239px;"><p class="vanilla-image-block" style="padding-top:121.07%;"><img id="FrEQh6QFhVjxEGTiUafDmn" name="Pixel 11 Pro deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FrEQh6QFhVjxEGTiUafDmn.jpg" mos="" align="middle" fullscreen="" width="1239" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="2a826532-9d99-11f1-9589-07f99038ad33" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" data-dimension25=""><strong>free w/ new line + unlimited @ Verizon</strong></a><br>Verizon is offering the Pixel 11 Pro for free when you purchase it with an Unlimited data plan. Plus, you'll get a free Pixel Watch 5 and Galaxy Tab S10 FE 5G with any Google phone purchase. The Pixel 11 Pro features a 6.3-inch Super Actua OLED display (1280 x 2856) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro review</a> we said the upgrades are minimal, but there are some excellent improvements to the camera. Just note that it comes with less RAM and weaker battery than its predecessor. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="2a826532-9d99-11f1-9589-07f99038ad33" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><p>In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro review</a>, we said Google's new phone is a good phone, but you should be aware of the compromises you'll need to make. First, it costs $100 more than the Pixel 10 Pro. The upside is that the new model comes with 256GB of storage instead of 128GB. However, the base Pixel 11 Pro's RAM has been downgraded from 16GB on its predecessor to just 12GB of the new Pixel 11 Pro. The cost of RAM has been skyrocketing and while we don't like that Google did this, we can at least understand why they did it.   </p><p>That said, the Pixel 11 Pro offers better cameras, AI features, and better overall performance than the Pixel 10 Pro. Not to mention you get a brighter display. So while we wouldn't recommend paying full price for the Pixel 11 Pro, we would absolutely recommend getting it for free at Verizon. Especially since it's bundled with the Pixel Watch 5 and a Galaxy tablet. Just remember that to get this deal you'll need to purchase your phone with a an Unlimited data plan. </p><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&rows=6&view_mode=savings_squad&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=${siteParam}&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (!this.activeDealTag && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 40px; min-height: 40px;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 36px; min-height: 36px;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I found a secret way to get the new Pixel 11 for free — save up to $1,100 right now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>A new batch of Google Pixel 11 deals just went live. Now that Google's phones are widely available, carriers and retailers alike are offering a wide variety of Pixel 11 deals. I'm an expert deals hunter and on this page I'm rounding up the best Pixel 11 sales and trade-in offers. </p><p>Google's new lineup includes the 6.3-inch Pixel 11 ($899), 6.3-inch Pixel 11 Pro ($1,099), 6.8-inch Pixel 11 Pro XL ($1,299), and Pixel 11 Pro Fold ($1,899). The latter sports a 6.5-inch cover display and 8-inch main display. </p><p>If you're looking for carrier deals, <a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">T-Mobile is offering the Pixel 11, Pixel 11 Pro, or Pixel 11 Pro XL for free</a> with select data plans and no trade-in required. It's one of the best Pixel 11 deals I've seen from any carrier so far. On the retailer front, <a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow">Best Buy has the Pixel 11 from $99</a> with trade-in. Plus, you'll get from a <a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow">$100 to $350 eGift card</a> with your purchase.</p><p>Below I've rounded up all of the best Pixel 11 deals you can get right now. For more deals and personal recommendations, check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> homepage. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free Pixel 11/Pixel 11 Pro/Pixel 11 Pro XL</strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow"><strong>Pixel 11 Pro w/ free Pixel Watch 5 + Tab S10 F 5G</strong></a></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/browse/google/?source=EOC621821156" target="_blank" rel="nofollow"><strong>free Pixel 11 Pro or Pixel 11 Pro XL w/ trade-in</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop?category=device&brand=google&page=1" target="_blank" rel="nofollow"><strong>free w/ trade-in</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><strong>up to $350 gift card</strong></a></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/stores/page/7BD63C98-E7D2-406E-A063-4DC485BD0AB3" target="_blank" rel="nofollow"><strong>up to $200 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-pixel-11"><span>Pixel 11</span></h3><div class="product"><a data-dimension112="461d1324-9bf9-11f1-b664-8992448fc034" data-action="Deal Block" data-label="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d1324-9bf9-11f1-b664-8992448fc034" data-action="Deal Block" data-label="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 deals it's offering. For example, you can get it for free with trade-in and an Experience Beyond or More plan. Or get up to $500 off with trade-in on most plans. The new phone features a 6.3-inch Actua Display OLED (2424 x 1080) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 48MP (f/1.7) main, 13MP (f/2.2) ultrawide, and 10.8MP (f/3.1) telephoto with 5x optical zoom. On the front there's a 10.5MP (f/2.2) lens. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d1324-9bf9-11f1-b664-8992448fc034" data-action="Deal Block" data-label="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1392-9bf9-11f1-9ac2-1d896b9f6ae5" data-action="Deal Block" data-label="Google Pixel 11: free $100 gift card @ Best Buy" data-dimension48="Google Pixel 11: free $100 gift card @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1392-9bf9-11f1-9ac2-1d896b9f6ae5" data-action="Deal Block" data-label="Google Pixel 11: free $100 gift card @ Best Buy" data-dimension48="Google Pixel 11: free $100 gift card @ Best Buy" data-dimension25=""><strong>free $100 gift card @ Best Buy</strong></a><br>Best Buy will bundle a free $100 Best Buy gift card with your Pixel 11 purchase. You can also get up to $700 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1392-9bf9-11f1-9ac2-1d896b9f6ae5" data-action="Deal Block" data-label="Google Pixel 11: free $100 gift card @ Best Buy" data-dimension48="Google Pixel 11: free $100 gift card @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d140a-9bf9-11f1-90d1-f3b7ec3fb38f" data-action="Deal Block" data-label="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11: </strong><a href="https://www.att.com/buy/phones/google-pixel-11.html" target="_blank" rel="nofollow" data-dimension112="461d140a-9bf9-11f1-90d1-f3b7ec3fb38f" data-action="Deal Block" data-label="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>$5/month w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 for $5.43/month when you buy it with any unlimited data plan. It features a 6.3-inch Actua Display OLED (2424 x 1080) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 48MP (f/1.7) main, 13MP (f/2.2) ultrawide, and 10.8MP (f/3.1) telephoto with 5x optical zoom. On the front there's a 10.5MP (f/2.2) lens. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11.html" target="_blank" rel="nofollow" data-dimension112="461d140a-9bf9-11f1-90d1-f3b7ec3fb38f" data-action="Deal Block" data-label="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d1478-9bf9-11f1-8be6-b3ff597caebe" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1478-9bf9-11f1-8be6-b3ff597caebe" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>The Pixel 11 is a solid Android phone if you're using a Pixel 9 or older device. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-review">Pixel 11 review</a> we said the biggest incentives to get one include its smarter Gemini AI capabilities and handy new camera tools, both of which genuinely elevate daily use. Trade-in an old phone and sign up for an eligible unlimited plan to get it for free at Verizon. Plus, you'll get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1478-9bf9-11f1-8be6-b3ff597caebe" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d14f0-9bf9-11f1-9fe1-2d09be76b3d8" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow" data-dimension112="461d14f0-9bf9-11f1-9fe1-2d09be76b3d8" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 for free with trade-in. Don't have a trade-in? You can save up to $600 with a new line. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow" data-dimension112="461d14f0-9bf9-11f1-9fe1-2d09be76b3d8" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d155e-9bf9-11f1-bc92-cfd702a1f75d" data-action="Deal Block" data-label="Pixel 11" data-dimension48="Pixel 11" data-dimension25="$899" href="https://www.amazon.com/dp/B0HBF7RD17" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:65.00%;"><img id="KS47xsRA6Nw9sHNzWrSNAH" name="Pixel 11 deal block Amazon" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KS47xsRA6Nw9sHNzWrSNAH.jpg" mos="" align="middle" fullscreen="" width="1500" height="975" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $100 Amazon gift card with your Pixel 11 purchase. This deal is valid through August 27 at 11:59pm (PT) or while supplies last.<a class="view-deal button" href="https://www.amazon.com/dp/B0HBF7RD17" target="_blank" rel="nofollow" data-dimension112="461d155e-9bf9-11f1-bc92-cfd702a1f75d" data-action="Deal Block" data-label="Pixel 11" data-dimension48="Pixel 11" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="461d15d6-9bf9-11f1-8640-d150dc675600" data-action="Deal Block" data-label="Google Pixel 11: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11: up to $500 off w/ trade-in @ Google" href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11: </strong><a href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d15d6-9bf9-11f1-8640-d150dc675600" data-action="Deal Block" data-label="Google Pixel 11: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11: up to $500 off w/ trade-in @ Google" data-dimension25=""><strong>up to $500 off w/ trade-in @ Google</strong></a><br>Open an account at the Google Store and you can get up to $500 off your Pixel 11. Plus, you'll get $130 off the new Pixel Watch 5 or a $100 Google Store credit when you buy the unlocked Pixel 11. Shoppers will also get 3 months of YouTube Premium for free. <a class="view-deal button" href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d15d6-9bf9-11f1-8640-d150dc675600" data-action="Deal Block" data-label="Google Pixel 11: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11: up to $500 off w/ trade-in @ Google" data-dimension25="">View Deal</a></p></div><ul><li><a href="#main">Back to the top ⤴</a></li></ul><h3 class="article-body__section" id="section-pixel-11-pro"><span>Pixel 11 Pro</span></h3><div class="product"><a data-dimension112="461d16bc-9bf9-11f1-9d08-0f98f5fc1d40" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d16bc-9bf9-11f1-9d08-0f98f5fc1d40" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 Pro deals it's offering. For example, you can get it for free with trade-in on Experience More or Experience Beyond plans. Or get $500 off with trade-in on most plans. It features a 6.3-inch Super Actua OLED display (1280 x 2856) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro review</a> we said the upgrades are minimal, but there are some excellent improvements to the camera. Just note that it comes with less RAM and weaker battery than its predecessor. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d16bc-9bf9-11f1-9d08-0f98f5fc1d40" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d172a-9bf9-11f1-9622-156906d45a0c" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11-pro.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro: </strong><a href="https://www.att.com/buy/phones/google-pixel-11-pro.html" target="_blank" rel="nofollow" data-dimension112="461d172a-9bf9-11f1-9622-156906d45a0c" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>free w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 Pro for free with trade-in and an eligible unlimited data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11-pro.html" target="_blank" rel="nofollow" data-dimension112="461d172a-9bf9-11f1-9622-156906d45a0c" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d17a2-9bf9-11f1-bcbd-572ab8b3a93b" data-action="Deal Block" data-label="Google Pixel 11 Pro: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro: free $200 gift card @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d17a2-9bf9-11f1-bcbd-572ab8b3a93b" data-action="Deal Block" data-label="Google Pixel 11 Pro: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro: free $200 gift card @ Best Buy" data-dimension25=""><strong>free $200 gift card @ Best Buy</strong></a><br>Best Buy will bundle a free $200 Best Buy gift card with your Pixel 11 Pro purchase. You can also get up to $1,000 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d17a2-9bf9-11f1-bcbd-572ab8b3a93b" data-action="Deal Block" data-label="Google Pixel 11 Pro: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro: free $200 gift card @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1810-9bf9-11f1-a93d-35f3954abe98" data-action="Deal Block" data-label="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow" data-dimension112="461d1810-9bf9-11f1-a93d-35f3954abe98" data-action="Deal Block" data-label="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>$45/month w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is offering the Pixel 11 Pro for $45/month with trade-in and eligible unlimited data plans. Plus, you can get a free Pixel Watch 5 and Galaxy Tab S10 FE 5G. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow" data-dimension112="461d1810-9bf9-11f1-a93d-35f3954abe98" data-action="Deal Block" data-label="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d1888-9bf9-11f1-aa22-b1ca94f53a70" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="461d1888-9bf9-11f1-aa22-b1ca94f53a70" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro for free with trade-in. Or get $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="461d1888-9bf9-11f1-aa22-b1ca94f53a70" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1900-9bf9-11f1-a27d-91a7fe64cacf" data-action="Deal Block" data-label="Pixel 11 Pro" data-dimension48="Pixel 11 Pro" data-dimension25="$1099" href="https://www.amazon.com/Google-Pixel-11-Pro-Canyon/dp/B0HBFR8NVY" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:65.33%;"><img id="C2Q2VbZ7JQHQhvS3f4kyoj" name="Pixel 11 Pro deal block Amazon" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/C2Q2VbZ7JQHQhvS3f4kyoj.jpg" mos="" align="middle" fullscreen="" width="1500" height="980" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $200 Amazon gift card with your Pixel 11 Pro. This deal is valid through August 27 at 11:59pm (PT) or while supplies last. <a class="view-deal button" href="https://www.amazon.com/Google-Pixel-11-Pro-Canyon/dp/B0HBFR8NVY" target="_blank" rel="nofollow" data-dimension112="461d1900-9bf9-11f1-a27d-91a7fe64cacf" data-action="Deal Block" data-label="Pixel 11 Pro" data-dimension48="Pixel 11 Pro" data-dimension25="$1099">View Deal</a></p></div><div class="product"><a data-dimension112="461d196e-9bf9-11f1-a8e5-65a4fb83c04a" data-action="Deal Block" data-label="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" href="https://store.google.com/product/pixel_11_pro?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro: </strong><a href="https://store.google.com/product/pixel_11_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d196e-9bf9-11f1-a8e5-65a4fb83c04a" data-action="Deal Block" data-label="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" data-dimension25=""><strong>from $499 w/ trade-in @ Google</strong></a><br>Open an account at the Google Store and you can get the Pixel 11 Pro from $499 with trade-in. You can also get $250 off the new Pixel Watch 5 or $200 in Google Store credit. <a class="view-deal button" href="https://store.google.com/product/pixel_11_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d196e-9bf9-11f1-a8e5-65a4fb83c04a" data-action="Deal Block" data-label="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-pixel-11-pro-xl"><span>Pixel 11 Pro XL</span></h3><div class="product"><a data-dimension112="461d1a54-9bf9-11f1-875a-73b1eb2f3ad3" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d1a54-9bf9-11f1-875a-73b1eb2f3ad3" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 Pro XL deals it's offering. For example, you can get get it for free on an Experience Beyond plan with trade-in or up to $1,100 off with trade-in on an Experience More plan. Or get up to $500 off with trade-in on most plans. It features a 6.8-inch Super Actua OLED display (1344 x 2992) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro XL review</a>, we said it offers better cameras and AI features than its predecessor, but it's not worth the full price of admission. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d1a54-9bf9-11f1-875a-73b1eb2f3ad3" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1acc-9bf9-11f1-acdf-e16b0d6be744" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1acc-9bf9-11f1-acdf-e16b0d6be744" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is offering the Pixel 11 Pro XL for free with trade-in and eligible unlimited data plans. Plus, you'll get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1acc-9bf9-11f1-acdf-e16b0d6be744" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d1b3a-9bf9-11f1-a2b5-af729bbd3830" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL: </strong><a href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.html" target="_blank" rel="nofollow" data-dimension112="461d1b3a-9bf9-11f1-a2b5-af729bbd3830" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>free w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 Pro XL for free with trade-in and an eligible unlimited data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.html" target="_blank" rel="nofollow" data-dimension112="461d1b3a-9bf9-11f1-a2b5-af729bbd3830" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d1bb2-9bf9-11f1-bac2-c38e35b2b982" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1bb2-9bf9-11f1-bac2-c38e35b2b982" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" data-dimension25=""><strong>free $200 gift card @ Best Buy</strong></a><br>Best Buy will bundle a free $200 Best Buy gift card with your Pixel 11 Pro XL purchase. You can also get up to $1,000 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1bb2-9bf9-11f1-bac2-c38e35b2b982" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1c2a-9bf9-11f1-926f-35064f53c83c" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="461d1c2a-9bf9-11f1-926f-35064f53c83c" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro XL for free with trade-in. Or get up to $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="461d1c2a-9bf9-11f1-926f-35064f53c83c" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1ca2-9bf9-11f1-ac97-277b7f4e5d95" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" href="https://store.google.com/config/pixel_11_pro?hl=en-US&selections=eyJwcm9kdWN0RmFtaWx5IjoiY0dsNFpXeGZNVEZmY0hKdiJ9" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL: </strong><a href="https://store.google.com/config/pixel_11_pro?hl=en-US&selections=eyJwcm9kdWN0RmFtaWx5IjoiY0dsNFpXeGZNVEZmY0hKdiJ9" target="_blank" rel="nofollow" data-dimension112="461d1ca2-9bf9-11f1-ac97-277b7f4e5d95" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" data-dimension25=""><strong>from $599 w/ trade-in @ Google</strong></a><br>The Google Store is offering its Pixel 11 Pro XL from $599 after trade-in. Even better, you can get $250 off the new Google Pixel Watch 5 or $200 in Google Store credit when you buy the unlocked Google Pixel 11 Pro XL.<a class="view-deal button" href="https://store.google.com/config/pixel_11_pro?hl=en-US&selections=eyJwcm9kdWN0RmFtaWx5IjoiY0dsNFpXeGZNVEZmY0hKdiJ9" target="_blank" rel="nofollow" data-dimension112="461d1ca2-9bf9-11f1-ac97-277b7f4e5d95" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" data-dimension25="">View Deal</a></p></div><ul><li><a href="#main">Back to the top ⤴</a></li></ul><h3 class="article-body__section" id="section-pixel-11-pro-fold"><span>Pixel 11 Pro Fold</span></h3><div class="product"><a data-dimension112="461d1d88-9bf9-11f1-810c-b19b990ad058" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro Fold: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1d88-9bf9-11f1-810c-b19b990ad058" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" data-dimension25=""><strong>free $350 gift card @ Best Buy</strong></a><br>Best Buy will bundle a free $350 Best Buy gift card with your Pixel 11 Pro Fold purchase. You can also get up to $1,000 off with a trade-in. It features a 6.5-inch Super Actua OLED (1080 x 2342) 120Hz cover display and an 8-inch Super Actua OLED (2076 x 2152) 120Hz main display. Powering the phone is the new Tensor G6 chipset coupled with 12GB of RAM and 256GB of storage. Rear cameras include a 48MP (f/1.7) wide, 10.5MP (f/2.2) ultrawide with Macro Focus, and a 10.8MP (f/3.1) 5x telephoto lens. On the front there's a 10MP inner and cover camera. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold review</a>, we said it's lighter, thinner, tougher, and faster than its predecessor, but feels like an iterative update that you should only buy on sale. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1d88-9bf9-11f1-810c-b19b990ad058" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1e00-9bf9-11f1-926e-c3bd1dfd08e7" data-action="Deal Block" data-label="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro Fold: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1e00-9bf9-11f1-926e-c3bd1dfd08e7" data-action="Deal Block" data-label="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is taking up to $1,000 off the Pixel 11 Pro Fold with trade-in and new line. (You must also opt for Verizon's Unlimited Ultimate data plan). You'll also get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1e00-9bf9-11f1-926e-c3bd1dfd08e7" data-action="Deal Block" data-label="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d1e78-9bf9-11f1-a8b4-917f57f92149" data-action="Deal Block" data-label="Pixel 11 Pro Fold" data-dimension48="Pixel 11 Pro Fold" data-dimension25="$1899" href="https://www.amazon.com/dp/B0HCRVD7VP" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:84.67%;"><img id="TVW9bK4fyf6XDagYQFJcbd" name="Pixel 11 Pro Fold deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TVW9bK4fyf6XDagYQFJcbd.jpg" mos="" align="middle" fullscreen="" width="1500" height="1270" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $350 Amazon gift card with your Pixel 11 Pro Fold. This deal is valid through August 27 at 11:59pm (PT) or while supplies last. <a class="view-deal button" href="https://www.amazon.com/dp/B0HCRVD7VP" target="_blank" rel="nofollow" data-dimension112="461d1e78-9bf9-11f1-a8b4-917f57f92149" data-action="Deal Block" data-label="Pixel 11 Pro Fold" data-dimension48="Pixel 11 Pro Fold" data-dimension25="$1899">View Deal</a></p></div><div class="product"><a data-dimension112="461d1ef0-9bf9-11f1-817b-ed6f5f6c4e99" data-action="Deal Block" data-label="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro Fold: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow" data-dimension112="461d1ef0-9bf9-11f1-817b-ed6f5f6c4e99" data-action="Deal Block" data-label="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>$16/month w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro Fold for $16.63/month with trade-in. Or get up to $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow" data-dimension112="461d1ef0-9bf9-11f1-817b-ed6f5f6c4e99" data-action="Deal Block" data-label="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1f5e-9bf9-11f1-a369-15288b09a87b" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" href="https://store.google.com/product/pixel_11_pro_fold?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro Fold: </strong><a href="https://store.google.com/product/pixel_11_pro_fold?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d1f5e-9bf9-11f1-a369-15288b09a87b" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" data-dimension25=""><strong>from $899 w/ trade-in @ Google</strong></a><br>Open an account at the Google Store and you can get the Pixel 11 Pro Fold from $899 for the unlocked version of the phone. Plus, you can get the new Google Pixel Watch 5 (41 mm) Wi-Fi on us or $350 in Google Store credit with your purchase. <a class="view-deal button" href="https://store.google.com/product/pixel_11_pro_fold?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d1f5e-9bf9-11f1-a369-15288b09a87b" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" data-dimension25="">View Deal</a></p></div><ul><li><a href="#main">Back to the top ⤴</a></li></ul><h3 class="article-body__section" id="section-pixel-watch-5"><span>Pixel Watch 5</span></h3><div class="product"><a data-dimension112="24b5c2ca-9cdb-11f1-ac6a-110f0cf3b40c" data-action="Deal Block" data-label="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension48="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension25="$" href="https://btsbeyondthesmartphone.sjv.io/c/221109/4014820/43862?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1333px;"><p class="vanilla-image-block" style="padding-top:112.53%;"><img id="tB3HfGmM99a8uHaH4zXnjc" name="Pixel Watch 5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tB3HfGmM99a8uHaH4zXnjc.jpg" mos="" align="middle" fullscreen="" width="1333" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel Watch 5: </strong><a href="https://btsbeyondthesmartphone.sjv.io/c/221109/4014820/43862?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="24b5c2ca-9cdb-11f1-ac6a-110f0cf3b40c" data-action="Deal Block" data-label="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension48="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension25="$"><strong>up to $300 off @ T-Mobile</strong></a><strong></strong><br>The Pixel Watch 5 sports the same design, dimensions, display, and battery life as the Pixel Watch 4. However, it offers improved GPS tracking for outdoor workouts and faster/more efficient processing power. It also supports three unique new wellness tools: Breathing Emergency Detection, Blood Pressure Trends, and Insulin Resistance Trends. In our <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch5-review">Pixel Watch 5 review</a>, we said its new Blood Pressure trends report and a monthly Insulin Resistance trends report could be revolutionary. Activate a  qualifying Watch Plan Plus 2.0 on T-Mobile and the carrier will take $300 off the watch's full price for a final monthly bill of just $5.55 over the span of 36 months. <a class="view-deal button" href="https://btsbeyondthesmartphone.sjv.io/c/221109/4014820/43862?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="24b5c2ca-9cdb-11f1-ac6a-110f0cf3b40c" data-action="Deal Block" data-label="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension48="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension25="$">View Deal</a></p></div><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop more deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&view_mode=carousel&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=light_blue" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = this.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += this.getRowsLimit();                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');               document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/best-google-pixel-11-and-pixel-11-pro-deals</link>
                                                                            <description>
                            <![CDATA[ From Best Buy to T-Mobile, I'm spotlighting all of the best Pixel 11 deals you can get right now at carriers and retailers alike. Here's how you can save big. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Dx78RYs5Nrs4sBUCaEXBVE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AWduGMa6Wo4QyPsWigLxVJ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 20 Aug 2026 11:30:00 +0000</pubDate>                                                                                                                                <updated>Fri, 28 Aug 2026 20:27:10 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more. He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac. &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&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/AWduGMa6Wo4QyPsWigLxVJ-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Four Pixel 11 phones held in hand]]></media:description>                                                            <media:text><![CDATA[Four Pixel 11 phones held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Four Pixel 11 phones held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AWduGMa6Wo4QyPsWigLxVJ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A new batch of Google Pixel 11 deals just went live. Now that Google's phones are widely available, carriers and retailers alike are offering a wide variety of Pixel 11 deals. I'm an expert deals hunter and on this page I'm rounding up the best Pixel 11 sales and trade-in offers. </p><p>Google's new lineup includes the 6.3-inch Pixel 11 ($899), 6.3-inch Pixel 11 Pro ($1,099), 6.8-inch Pixel 11 Pro XL ($1,299), and Pixel 11 Pro Fold ($1,899). The latter sports a 6.5-inch cover display and 8-inch main display. </p><p>If you're looking for carrier deals, <a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">T-Mobile is offering the Pixel 11, Pixel 11 Pro, or Pixel 11 Pro XL for free</a> with select data plans and no trade-in required. It's one of the best Pixel 11 deals I've seen from any carrier so far. On the retailer front, <a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow">Best Buy has the Pixel 11 from $99</a> with trade-in. Plus, you'll get from a <a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow">$100 to $350 eGift card</a> with your purchase.</p><p>Below I've rounded up all of the best Pixel 11 deals you can get right now. For more deals and personal recommendations, check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> homepage. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free Pixel 11/Pixel 11 Pro/Pixel 11 Pro XL</strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow"><strong>Pixel 11 Pro w/ free Pixel Watch 5 + Tab S10 F 5G</strong></a></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/browse/google/?source=EOC621821156" target="_blank" rel="nofollow"><strong>free Pixel 11 Pro or Pixel 11 Pro XL w/ trade-in</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop?category=device&brand=google&page=1" target="_blank" rel="nofollow"><strong>free w/ trade-in</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><strong>up to $350 gift card</strong></a></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/stores/page/7BD63C98-E7D2-406E-A063-4DC485BD0AB3" target="_blank" rel="nofollow"><strong>up to $200 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-pixel-11"><span>Pixel 11</span></h3><div class="product"><a data-dimension112="461d1324-9bf9-11f1-b664-8992448fc034" data-action="Deal Block" data-label="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d1324-9bf9-11f1-b664-8992448fc034" data-action="Deal Block" data-label="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 deals it's offering. For example, you can get it for free with trade-in and an Experience Beyond or More plan. Or get up to $500 off with trade-in on most plans. The new phone features a 6.3-inch Actua Display OLED (2424 x 1080) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 48MP (f/1.7) main, 13MP (f/2.2) ultrawide, and 10.8MP (f/3.1) telephoto with 5x optical zoom. On the front there's a 10.5MP (f/2.2) lens. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d1324-9bf9-11f1-b664-8992448fc034" data-action="Deal Block" data-label="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1392-9bf9-11f1-9ac2-1d896b9f6ae5" data-action="Deal Block" data-label="Google Pixel 11: free $100 gift card @ Best Buy" data-dimension48="Google Pixel 11: free $100 gift card @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1392-9bf9-11f1-9ac2-1d896b9f6ae5" data-action="Deal Block" data-label="Google Pixel 11: free $100 gift card @ Best Buy" data-dimension48="Google Pixel 11: free $100 gift card @ Best Buy" data-dimension25=""><strong>free $100 gift card @ Best Buy</strong></a><br>Best Buy will bundle a free $100 Best Buy gift card with your Pixel 11 purchase. You can also get up to $700 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1392-9bf9-11f1-9ac2-1d896b9f6ae5" data-action="Deal Block" data-label="Google Pixel 11: free $100 gift card @ Best Buy" data-dimension48="Google Pixel 11: free $100 gift card @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d140a-9bf9-11f1-90d1-f3b7ec3fb38f" data-action="Deal Block" data-label="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11: </strong><a href="https://www.att.com/buy/phones/google-pixel-11.html" target="_blank" rel="nofollow" data-dimension112="461d140a-9bf9-11f1-90d1-f3b7ec3fb38f" data-action="Deal Block" data-label="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>$5/month w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 for $5.43/month when you buy it with any unlimited data plan. It features a 6.3-inch Actua Display OLED (2424 x 1080) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 48MP (f/1.7) main, 13MP (f/2.2) ultrawide, and 10.8MP (f/3.1) telephoto with 5x optical zoom. On the front there's a 10.5MP (f/2.2) lens. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11.html" target="_blank" rel="nofollow" data-dimension112="461d140a-9bf9-11f1-90d1-f3b7ec3fb38f" data-action="Deal Block" data-label="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d1478-9bf9-11f1-8be6-b3ff597caebe" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1478-9bf9-11f1-8be6-b3ff597caebe" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>The Pixel 11 is a solid Android phone if you're using a Pixel 9 or older device. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-review">Pixel 11 review</a> we said the biggest incentives to get one include its smarter Gemini AI capabilities and handy new camera tools, both of which genuinely elevate daily use. Trade-in an old phone and sign up for an eligible unlimited plan to get it for free at Verizon. Plus, you'll get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1478-9bf9-11f1-8be6-b3ff597caebe" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d14f0-9bf9-11f1-9fe1-2d09be76b3d8" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow" data-dimension112="461d14f0-9bf9-11f1-9fe1-2d09be76b3d8" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 for free with trade-in. Don't have a trade-in? You can save up to $600 with a new line. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow" data-dimension112="461d14f0-9bf9-11f1-9fe1-2d09be76b3d8" data-action="Deal Block" data-label="Pixel 11: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d155e-9bf9-11f1-bc92-cfd702a1f75d" data-action="Deal Block" data-label="Pixel 11" data-dimension48="Pixel 11" data-dimension25="$899" href="https://www.amazon.com/dp/B0HBF7RD17" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:65.00%;"><img id="KS47xsRA6Nw9sHNzWrSNAH" name="Pixel 11 deal block Amazon" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KS47xsRA6Nw9sHNzWrSNAH.jpg" mos="" align="middle" fullscreen="" width="1500" height="975" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $100 Amazon gift card with your Pixel 11 purchase. This deal is valid through August 27 at 11:59pm (PT) or while supplies last.<a class="view-deal button" href="https://www.amazon.com/dp/B0HBF7RD17" target="_blank" rel="nofollow" data-dimension112="461d155e-9bf9-11f1-bc92-cfd702a1f75d" data-action="Deal Block" data-label="Pixel 11" data-dimension48="Pixel 11" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="461d15d6-9bf9-11f1-8640-d150dc675600" data-action="Deal Block" data-label="Google Pixel 11: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11: up to $500 off w/ trade-in @ Google" href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11: </strong><a href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d15d6-9bf9-11f1-8640-d150dc675600" data-action="Deal Block" data-label="Google Pixel 11: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11: up to $500 off w/ trade-in @ Google" data-dimension25=""><strong>up to $500 off w/ trade-in @ Google</strong></a><br>Open an account at the Google Store and you can get up to $500 off your Pixel 11. Plus, you'll get $130 off the new Pixel Watch 5 or a $100 Google Store credit when you buy the unlocked Pixel 11. Shoppers will also get 3 months of YouTube Premium for free. <a class="view-deal button" href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d15d6-9bf9-11f1-8640-d150dc675600" data-action="Deal Block" data-label="Google Pixel 11: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11: up to $500 off w/ trade-in @ Google" data-dimension25="">View Deal</a></p></div><ul><li><a href="#main">Back to the top ⤴</a></li></ul><h3 class="article-body__section" id="section-pixel-11-pro"><span>Pixel 11 Pro</span></h3><div class="product"><a data-dimension112="461d16bc-9bf9-11f1-9d08-0f98f5fc1d40" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d16bc-9bf9-11f1-9d08-0f98f5fc1d40" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 Pro deals it's offering. For example, you can get it for free with trade-in on Experience More or Experience Beyond plans. Or get $500 off with trade-in on most plans. It features a 6.3-inch Super Actua OLED display (1280 x 2856) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro review</a> we said the upgrades are minimal, but there are some excellent improvements to the camera. Just note that it comes with less RAM and weaker battery than its predecessor. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d16bc-9bf9-11f1-9d08-0f98f5fc1d40" data-action="Deal Block" data-label="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d172a-9bf9-11f1-9622-156906d45a0c" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11-pro.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro: </strong><a href="https://www.att.com/buy/phones/google-pixel-11-pro.html" target="_blank" rel="nofollow" data-dimension112="461d172a-9bf9-11f1-9622-156906d45a0c" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>free w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 Pro for free with trade-in and an eligible unlimited data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11-pro.html" target="_blank" rel="nofollow" data-dimension112="461d172a-9bf9-11f1-9622-156906d45a0c" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro: free w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d17a2-9bf9-11f1-bcbd-572ab8b3a93b" data-action="Deal Block" data-label="Google Pixel 11 Pro: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro: free $200 gift card @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d17a2-9bf9-11f1-bcbd-572ab8b3a93b" data-action="Deal Block" data-label="Google Pixel 11 Pro: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro: free $200 gift card @ Best Buy" data-dimension25=""><strong>free $200 gift card @ Best Buy</strong></a><br>Best Buy will bundle a free $200 Best Buy gift card with your Pixel 11 Pro purchase. You can also get up to $1,000 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d17a2-9bf9-11f1-bcbd-572ab8b3a93b" data-action="Deal Block" data-label="Google Pixel 11 Pro: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro: free $200 gift card @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1810-9bf9-11f1-a93d-35f3954abe98" data-action="Deal Block" data-label="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow" data-dimension112="461d1810-9bf9-11f1-a93d-35f3954abe98" data-action="Deal Block" data-label="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>$45/month w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is offering the Pixel 11 Pro for $45/month with trade-in and eligible unlimited data plans. Plus, you can get a free Pixel Watch 5 and Galaxy Tab S10 FE 5G. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow" data-dimension112="461d1810-9bf9-11f1-a93d-35f3954abe98" data-action="Deal Block" data-label="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d1888-9bf9-11f1-aa22-b1ca94f53a70" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="461d1888-9bf9-11f1-aa22-b1ca94f53a70" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro for free with trade-in. Or get $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="461d1888-9bf9-11f1-aa22-b1ca94f53a70" data-action="Deal Block" data-label="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1900-9bf9-11f1-a27d-91a7fe64cacf" data-action="Deal Block" data-label="Pixel 11 Pro" data-dimension48="Pixel 11 Pro" data-dimension25="$1099" href="https://www.amazon.com/Google-Pixel-11-Pro-Canyon/dp/B0HBFR8NVY" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:65.33%;"><img id="C2Q2VbZ7JQHQhvS3f4kyoj" name="Pixel 11 Pro deal block Amazon" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/C2Q2VbZ7JQHQhvS3f4kyoj.jpg" mos="" align="middle" fullscreen="" width="1500" height="980" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $200 Amazon gift card with your Pixel 11 Pro. This deal is valid through August 27 at 11:59pm (PT) or while supplies last. <a class="view-deal button" href="https://www.amazon.com/Google-Pixel-11-Pro-Canyon/dp/B0HBFR8NVY" target="_blank" rel="nofollow" data-dimension112="461d1900-9bf9-11f1-a27d-91a7fe64cacf" data-action="Deal Block" data-label="Pixel 11 Pro" data-dimension48="Pixel 11 Pro" data-dimension25="$1099">View Deal</a></p></div><div class="product"><a data-dimension112="461d196e-9bf9-11f1-a8e5-65a4fb83c04a" data-action="Deal Block" data-label="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" href="https://store.google.com/product/pixel_11_pro?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro: </strong><a href="https://store.google.com/product/pixel_11_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d196e-9bf9-11f1-a8e5-65a4fb83c04a" data-action="Deal Block" data-label="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" data-dimension25=""><strong>from $499 w/ trade-in @ Google</strong></a><br>Open an account at the Google Store and you can get the Pixel 11 Pro from $499 with trade-in. You can also get $250 off the new Pixel Watch 5 or $200 in Google Store credit. <a class="view-deal button" href="https://store.google.com/product/pixel_11_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d196e-9bf9-11f1-a8e5-65a4fb83c04a" data-action="Deal Block" data-label="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro: from $499 w/ trade-in @ Google" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-pixel-11-pro-xl"><span>Pixel 11 Pro XL</span></h3><div class="product"><a data-dimension112="461d1a54-9bf9-11f1-875a-73b1eb2f3ad3" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d1a54-9bf9-11f1-875a-73b1eb2f3ad3" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 Pro XL deals it's offering. For example, you can get get it for free on an Experience Beyond plan with trade-in or up to $1,100 off with trade-in on an Experience More plan. Or get up to $500 off with trade-in on most plans. It features a 6.8-inch Super Actua OLED display (1344 x 2992) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Pixel 11 Pro XL review</a>, we said it offers better cameras and AI features than its predecessor, but it's not worth the full price of admission. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="461d1a54-9bf9-11f1-875a-73b1eb2f3ad3" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1acc-9bf9-11f1-acdf-e16b0d6be744" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1acc-9bf9-11f1-acdf-e16b0d6be744" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is offering the Pixel 11 Pro XL for free with trade-in and eligible unlimited data plans. Plus, you'll get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1acc-9bf9-11f1-acdf-e16b0d6be744" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d1b3a-9bf9-11f1-a2b5-af729bbd3830" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL: </strong><a href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.html" target="_blank" rel="nofollow" data-dimension112="461d1b3a-9bf9-11f1-a2b5-af729bbd3830" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>free w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 Pro XL for free with trade-in and an eligible unlimited data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.html" target="_blank" rel="nofollow" data-dimension112="461d1b3a-9bf9-11f1-a2b5-af729bbd3830" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL: free w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d1bb2-9bf9-11f1-bac2-c38e35b2b982" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1bb2-9bf9-11f1-bac2-c38e35b2b982" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" data-dimension25=""><strong>free $200 gift card @ Best Buy</strong></a><br>Best Buy will bundle a free $200 Best Buy gift card with your Pixel 11 Pro XL purchase. You can also get up to $1,000 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1bb2-9bf9-11f1-bac2-c38e35b2b982" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro XL: free $200 gift card @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1c2a-9bf9-11f1-926f-35064f53c83c" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="461d1c2a-9bf9-11f1-926f-35064f53c83c" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro XL for free with trade-in. Or get up to $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="461d1c2a-9bf9-11f1-926f-35064f53c83c" data-action="Deal Block" data-label="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1ca2-9bf9-11f1-ac97-277b7f4e5d95" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" href="https://store.google.com/config/pixel_11_pro?hl=en-US&selections=eyJwcm9kdWN0RmFtaWx5IjoiY0dsNFpXeGZNVEZmY0hKdiJ9" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL: </strong><a href="https://store.google.com/config/pixel_11_pro?hl=en-US&selections=eyJwcm9kdWN0RmFtaWx5IjoiY0dsNFpXeGZNVEZmY0hKdiJ9" target="_blank" rel="nofollow" data-dimension112="461d1ca2-9bf9-11f1-ac97-277b7f4e5d95" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" data-dimension25=""><strong>from $599 w/ trade-in @ Google</strong></a><br>The Google Store is offering its Pixel 11 Pro XL from $599 after trade-in. Even better, you can get $250 off the new Google Pixel Watch 5 or $200 in Google Store credit when you buy the unlocked Google Pixel 11 Pro XL.<a class="view-deal button" href="https://store.google.com/config/pixel_11_pro?hl=en-US&selections=eyJwcm9kdWN0RmFtaWx5IjoiY0dsNFpXeGZNVEZmY0hKdiJ9" target="_blank" rel="nofollow" data-dimension112="461d1ca2-9bf9-11f1-ac97-277b7f4e5d95" data-action="Deal Block" data-label="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro XL: from $599 w/ trade-in @ Google" data-dimension25="">View Deal</a></p></div><ul><li><a href="#main">Back to the top ⤴</a></li></ul><h3 class="article-body__section" id="section-pixel-11-pro-fold"><span>Pixel 11 Pro Fold</span></h3><div class="product"><a data-dimension112="461d1d88-9bf9-11f1-810c-b19b990ad058" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro Fold: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1d88-9bf9-11f1-810c-b19b990ad058" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" data-dimension25=""><strong>free $350 gift card @ Best Buy</strong></a><br>Best Buy will bundle a free $350 Best Buy gift card with your Pixel 11 Pro Fold purchase. You can also get up to $1,000 off with a trade-in. It features a 6.5-inch Super Actua OLED (1080 x 2342) 120Hz cover display and an 8-inch Super Actua OLED (2076 x 2152) 120Hz main display. Powering the phone is the new Tensor G6 chipset coupled with 12GB of RAM and 256GB of storage. Rear cameras include a 48MP (f/1.7) wide, 10.5MP (f/2.2) ultrawide with Macro Focus, and a 10.8MP (f/3.1) 5x telephoto lens. On the front there's a 10MP inner and cover camera. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold review</a>, we said it's lighter, thinner, tougher, and faster than its predecessor, but feels like an iterative update that you should only buy on sale. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="461d1d88-9bf9-11f1-810c-b19b990ad058" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold: free $350 gift card @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1e00-9bf9-11f1-926e-c3bd1dfd08e7" data-action="Deal Block" data-label="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro Fold: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1e00-9bf9-11f1-926e-c3bd1dfd08e7" data-action="Deal Block" data-label="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is taking up to $1,000 off the Pixel 11 Pro Fold with trade-in and new line. (You must also opt for Verizon's Unlimited Ultimate data plan). You'll also get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="461d1e00-9bf9-11f1-926e-c3bd1dfd08e7" data-action="Deal Block" data-label="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="461d1e78-9bf9-11f1-a8b4-917f57f92149" data-action="Deal Block" data-label="Pixel 11 Pro Fold" data-dimension48="Pixel 11 Pro Fold" data-dimension25="$1899" href="https://www.amazon.com/dp/B0HCRVD7VP" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:84.67%;"><img id="TVW9bK4fyf6XDagYQFJcbd" name="Pixel 11 Pro Fold deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TVW9bK4fyf6XDagYQFJcbd.jpg" mos="" align="middle" fullscreen="" width="1500" height="1270" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $350 Amazon gift card with your Pixel 11 Pro Fold. This deal is valid through August 27 at 11:59pm (PT) or while supplies last. <a class="view-deal button" href="https://www.amazon.com/dp/B0HCRVD7VP" target="_blank" rel="nofollow" data-dimension112="461d1e78-9bf9-11f1-a8b4-917f57f92149" data-action="Deal Block" data-label="Pixel 11 Pro Fold" data-dimension48="Pixel 11 Pro Fold" data-dimension25="$1899">View Deal</a></p></div><div class="product"><a data-dimension112="461d1ef0-9bf9-11f1-817b-ed6f5f6c4e99" data-action="Deal Block" data-label="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro Fold: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow" data-dimension112="461d1ef0-9bf9-11f1-817b-ed6f5f6c4e99" data-action="Deal Block" data-label="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>$16/month w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro Fold for $16.63/month with trade-in. Or get up to $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow" data-dimension112="461d1ef0-9bf9-11f1-817b-ed6f5f6c4e99" data-action="Deal Block" data-label="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold: $16/month w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="461d1f5e-9bf9-11f1-a369-15288b09a87b" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" href="https://store.google.com/product/pixel_11_pro_fold?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro Fold: </strong><a href="https://store.google.com/product/pixel_11_pro_fold?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d1f5e-9bf9-11f1-a369-15288b09a87b" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" data-dimension25=""><strong>from $899 w/ trade-in @ Google</strong></a><br>Open an account at the Google Store and you can get the Pixel 11 Pro Fold from $899 for the unlocked version of the phone. Plus, you can get the new Google Pixel Watch 5 (41 mm) Wi-Fi on us or $350 in Google Store credit with your purchase. <a class="view-deal button" href="https://store.google.com/product/pixel_11_pro_fold?hl=en-US" target="_blank" rel="nofollow" data-dimension112="461d1f5e-9bf9-11f1-a369-15288b09a87b" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" data-dimension48="Google Pixel 11 Pro Fold: from $899 w/ trade-in @ Google" data-dimension25="">View Deal</a></p></div><ul><li><a href="#main">Back to the top ⤴</a></li></ul><h3 class="article-body__section" id="section-pixel-watch-5"><span>Pixel Watch 5</span></h3><div class="product"><a data-dimension112="24b5c2ca-9cdb-11f1-ac6a-110f0cf3b40c" data-action="Deal Block" data-label="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension48="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension25="$" href="https://btsbeyondthesmartphone.sjv.io/c/221109/4014820/43862?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1333px;"><p class="vanilla-image-block" style="padding-top:112.53%;"><img id="tB3HfGmM99a8uHaH4zXnjc" name="Pixel Watch 5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tB3HfGmM99a8uHaH4zXnjc.jpg" mos="" align="middle" fullscreen="" width="1333" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel Watch 5: </strong><a href="https://btsbeyondthesmartphone.sjv.io/c/221109/4014820/43862?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="24b5c2ca-9cdb-11f1-ac6a-110f0cf3b40c" data-action="Deal Block" data-label="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension48="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension25="$"><strong>up to $300 off @ T-Mobile</strong></a><strong></strong><br>The Pixel Watch 5 sports the same design, dimensions, display, and battery life as the Pixel Watch 4. However, it offers improved GPS tracking for outdoor workouts and faster/more efficient processing power. It also supports three unique new wellness tools: Breathing Emergency Detection, Blood Pressure Trends, and Insulin Resistance Trends. In our <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch5-review">Pixel Watch 5 review</a>, we said its new Blood Pressure trends report and a monthly Insulin Resistance trends report could be revolutionary. Activate a  qualifying Watch Plan Plus 2.0 on T-Mobile and the carrier will take $300 off the watch's full price for a final monthly bill of just $5.55 over the span of 36 months. <a class="view-deal button" href="https://btsbeyondthesmartphone.sjv.io/c/221109/4014820/43862?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="24b5c2ca-9cdb-11f1-ac6a-110f0cf3b40c" data-action="Deal Block" data-label="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension48="Pixel Watch 5: up to $300 off @ T-Mobile" data-dimension25="$">View Deal</a></p></div><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop more deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&view_mode=carousel&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=light_blue" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = this.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += this.getRowsLimit();                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');               document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 Pro and Pro XL review: A sprinkling of interesting features can't make up for offering little else ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I'm torn on the Pixel 11 Pro and Pixel 11 Pro XL. </p><p>While these are not exactly bad phones, it's hard not to feel disappointed about what Google has released this year. There are few noticeable upgrades on paper, and the phones themselves have endured a $100 price hike that makes the apparent lack of progress sting even more. </p><p>But there's a lot more to a phone than what we can see on a specs sheet, and I was hoping that the Pixel 11 Pro could impress me in ways that I hadn't previously anticipated. </p><p>So I've been spending time with the phones to see whether Google's latest premium phones are actually worth picking up. Sadly, like the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10a-review">Pixel 10a</a>, it turns out that this phone is just another lazy update that feels like half a step backward from last year's models.</p><p>Read on for our full Google Pixel 11 Pro and Google Pixel 11 Pro XL review.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-pixel-11-pro-xl-review-cheat-sheet"><span>Google Pixel 11 Pro & Pixel 11 Pro XL review: Cheat Sheet</span></h2><ul><li><strong>What is it?</strong> The latest Pro-tier Pixel flagships, available in regular and XL sizes set to replace the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro</a> and <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL.</a></li><li><strong>Who is it for? </strong>Those people who want the Google-led Android experience, with fast updates and a heavy focus on cameras and AI. Ideally people who haven't upgraded their phones for a few years</li><li><strong>What does it cost?</strong> Prices for the Pixel 11 Pro start at $1,099 / £1,079 / AU$1,849 while the Pixel 11 Pro XL starts at $1,299 / £1,279 / AU$2,099. Both phones offer 256GB of storage and 12GB RAM, though higher storage tiers are available with 16GB of RAM</li><li><strong>What do we like? </strong>The Pixel 11 Pro and Pro XL have the brightest screen we've tested, alongside a scratch-resistant display, excellent AI-centric features and noticeable improvements to the cameras.</li><li><strong>What don't we like? </strong>Overall this is a fairly mediocre upgrade, continuing the longstanding Pixel tradition of weak performance, unimpressive battery life, reduced RAM on the cheapest models, and very little to make it an appealing purchase for a lot of people.</li></ul><h2 class="article-body__section" id="section-google-pixel-11-pro-pixel-11-pro-xl-review-specs"><span>Google Pixel 11 Pro & Pixel 11 Pro XL review: Specs</span></h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Google Pixel 11 Pro</strong></p></th><th  ><p><strong>Google Pixel 11 Pro XL</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$1,099 / £1,079 / AU$1,849</p></td><td  ><p>$1,299 / £1,279 / AU$2,099</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3-inch 1,280 x 2,856 Super Actua (OLED)</p></td><td  ><p>6.8-inch 1,344 x 2,992 Super Actua (OLED)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>1-120Hz</p></td><td  ><p>1-120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB, 16GB</p></td><td  ><p>12GB, 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB, 1TB</p></td><td  ><p>256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP (f/1.68) main, 48MP (f/1.7) ultrawide, 48MP (f/2.8) 5x telephoto</p></td><td  ><p>50MP (f/1.68) main, 48MP (f/1.7) ultrawide, 48MP (f/2.8) 5x telephoto</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>42MP (f/2.2)</p></td><td  ><p>42MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,850 mAh</p></td><td  ><p>5,115 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speeds</strong></p></td><td  ><p>30W wired, 25W wireless</p></td><td  ><p>45W wired, 25W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Construction Rating</strong></p></td><td  ><p>IP68</p></td><td  ><p>IP68</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6 x 2.8  x 0.3 inches</p></td><td  ><p>6.4  x 3 x 0.3 inches </p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>7.2 ounces / 204g</p></td><td  ><p>8 ounces / 226g</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Canyon, Olive, Fog, Obsidian (matte)</p></td><td  ><p>Canyon, Olive, Fog, Obsidian (matte)</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-google-pixel-11-pro-pixel-11-pro-xl-review-the-ups"><span>Google Pixel 11 Pro & Pixel 11 Pro XL review: The Ups</span></h2><p>The moment I got into testing these new Pixel 11 Pros, the small refinements jumped out at me. A lot of it comes down to the software running in the background, but there is one hardware upgrade (especially in the midst of a very bright summer) that I especially appreciated.</p><h2 id="brighter-displays">Brighter displays</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4921px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nZviYLL3UTdqX3WMiYyPjV" name="Google Pixel 11 Pro vs Pixel 11 Pro XL-3" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/nZviYLL3UTdqX3WMiYyPjV.jpg" mos="" align="middle" fullscreen="" width="4921" height="2768" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Pixel 10 Pro XL was the brightest phone we ever tested with peak brightness of 2,555 nits. Recently the phone was beaten by the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra's</a> 2,687 nits. Well now it seems the Pixel 11 Pro XL has reclaimed that title, with peak brightness of 2,877 nits — closely followed by the Pixel 11 Pro's 2,860 nits.</p><p>That's well in excess of the<a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review"> iPhone 17 Pro Max's</a> 1,281 nits brightness, and the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra's </a>1,806 nits. This ensures that the 11 Pro and Pro XL excel in brighter conditions, which I am currently plagued by in the heat of August. That being said, they do lack the anti-reflective display of the Galaxy Z Fold 8 Ultra and S26 Ultra.</p><p>Both Pro models do come with a special anti-scratch display, which should help prevent mini scratches from appearing when you're looking at the screen under bright light. While I haven't deliberately tried to scratch up the screens, I haven't noticed any of them mysteriously appear, either.</p><h2 id="cameras-have-improved">Cameras have improved</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5466px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="A7BH3wKbnA66d9kq43NxzV" name="Google Pixel 11 Pro XL-1" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/A7BH3wKbnA66d9kq43NxzV.jpg" mos="" align="middle" fullscreen="" width="5466" height="3075" 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>At first glance, the Pixel 11 Pro and Pro XL's cameras don't seem to have changed all that much compared to last year — but that's not the case. </p><p>The main camera and selfie cameras are functionally identical, that much is true, but the ultrawide and telephoto lenses have gained new larger sensors. While the Pixel 11 Pro misses the mark in a lot of areas, the camera quality is not one of them.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=f880881c-9b1c-11f1-ba1b-0e6f42328d7d"></iframe><p>The main camera lens is capable of going head to head with the Galaxy S26 Ultra's 200MP main camera, despite the obvious gap in resolution. The colors are a little more vivid on the Pixel, but the overall quality is fairly equal - to the point where you can see a lot of similar grain when you zoom in on the printed lettering.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=70ce47a0-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>The quality of the ultrawide seems fairly equal to the Pixel 10 Pro at first glance, but look a little closer and you can see that the Pixel 11 Pro's picture is a lot sharper. Whether that will affect casual appreciation of ultrawide-angle photos isn't clear, but it shows that Pixel 11 Pro is putting the larger camera sensor and Tensor G6 to good use.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=8892693e-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>It's a similar situation with the telephoto lens at 5x magnification. At first glance they don't seem all that different, but close in and you can see that the general quality on the Pixel 11 Pro's photo is clearer and sharper.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=a11dcc96-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>That's more noticeable at 10x magnification, with the Pixel 11 Pro XL's 10x "optical quality" camera picking up a lot more of the smaller details than the 10 Pro XL.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=cc5608b6-9b1c-11f1-ba1b-0e6f42328d7d"></iframe><p>The AI-enhanced 120x zoom is where Google's AI capabilities really shine, especially compared to Samsung's 100x zoom capabilities. Despite offering 20% more magnification than Samsung, the 11 Pro managed to create a much-clearer image than Samsung does - with brighter colors and a lot more detail. </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:4080px;"><p class="vanilla-image-block" style="padding-top:75.10%;"><img id="FYftCAQ5rb993bcE8z8f3m" name="PXL_20260815_144111397.BURST-02.original" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/FYftCAQ5rb993bcE8z8f3m.jpg" mos="" align="middle" fullscreen="" width="4080" height="3064" 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>But that's not just the AI, the unenhanced version of the photo (above) also looks a heck of a lot better than what Samsung managed to create with AI help.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=3b26666e-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>The quality of the selfie camera is generally fine, but they don't even come close to the detail afforded by the iPhone 17 Pro Max. The iPhone camera manages to pick up a lot more of the smaller details, and doesn't make me look like a vampire that's never seen sunlight before.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=1fc2cffc-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>It's very much the same situation with Portrait mode. However I prefer Google's bokeh effect, especially with how it singles my head out without offering quite so much blurring around the edges.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=56827a88-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>Low light quality is also pretty admirable, though the pictures often came out slightly darker than they did with the Pixel 10 Pro. I'd say that the 11 Pro produces a better picture, and the Instant Night Sight feature does make the process of low-light photography a lot easier to pull off.</p><p>That said, the process isn't actually instant. The camera still needs two seconds to shoot a photo, rather than the three to six seconds required by Night Sight on the Pixel 10 Pro. Still, it's amazing how much of a difference even a single second can make to the photography process — and that third second feels so much longer.</p><h2 id="cool-new-software-features">Cool new software features</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4583px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="N4jn57zhtSRfZnAScWkjiV" name="Google Pixel 11 Pro XL-6" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/N4jn57zhtSRfZnAScWkjiV.jpg" mos="" align="middle" fullscreen="" width="4583" height="2578" 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 aren't a whole lot of new software features coming to Pixel this year, but the ones that have been released are pretty impressive. The main trio include the Rambler dictation software, Magic Capture in the camera and Live Translate for media — though that's limited to YouTube videos for the time being.</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="YvbLS83tC8zPiUxMw97K3m" name="pixel2" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/YvbLS83tC8zPiUxMw97K3m.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>Magic Capture might just be my favorite, since it lets you record video of a situation and uses AI to identify which frames are actually worth keeping. </p><p>In other words it's a great way to get photos of moving targets, like children or pets, without having to try and time your shutter with the perfect situation. It's kind of like an alternative to a burst mode, which the Pixel 11 doesn't have, but instead of recording a series of still images, you get a short video clip instead.</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="8BKSBVCJP4Ld6wZWQSJhvk" name="pixel3" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/8BKSBVCJP4Ld6wZWQSJhvk.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>Live Translate is also pretty impressive, since it will automatically translate videos you're watching in real time. I have seen features like this on other phones, including the <a href="https://www.tomsguide.com/phones/android-phones/xiaomi-15-ultra-review-an-excellent-phone-you-probably-cant-buy">Xiaomi 15 Ultra</a>, but always found them to be a little finicky. </p><p>Google's version seems to work in a much simpler way, so long as you've downloaded the appropriate language packs in the system settings. The feature only works with YouTube right now, but once you load up the appropriate foreign-language video, you'll see a pop-up offering to translate the page — similar to how you would in a web browser.</p><p>Once the translation mechanism is engaged, it will feed you an English-version of whatever is said on screen while preserving some sense of accent and realism. In other words it's not a robotic AI voice that you'll find in some parts of the internet. I tried it in French and Spanish, and found that it worked pretty well — though the AI did fumble at times due to the speed at which some Spanish people speak.</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="8N2vMrHBSKbWGTvgkD6hok" name="pixel4" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/8N2vMrHBSKbWGTvgkD6hok.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>Rambler is also very interesting because it completely redesigns the voice-to-text feature in the Gboard app. I recently <a href="https://www.tomsguide.com/phones/iphones/ios-27-beta-has-new-and-improved-dictation-software-i-tested-it-by-writing-this-whole-article-with-my-voice">tested Gboard against iOS 27 beta's dictation capabilities</a> and found that they were at a very similar level. Rambler blows them both out of the water. </p><p>Not only was it able to figure out all the verbal tics humans add to speech, and ignore them, it's able to differentiate between voice typing and giving it commands.</p><p>Better still it could go back and make alterations to existing text, which is not something I've seen freely-available dictation software do before. I may be a big fan of traditional ways of typing (mostly pen and paper), but my early experience with Rambler could make a good attempt at changing that.</p><h2 id="256gb-on-the-pro">256GB on the Pro</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5859px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="R9Hx3vM2CpLJyNdwcf5BtV" name="Google Pixel 11 Pro vs Pixel 11 Pro XL-4" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/R9Hx3vM2CpLJyNdwcf5BtV.jpg" mos="" align="middle" fullscreen="" width="5859" height="3296" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I've spent years complaining that 128GB of base storage was no longer enough, and this year is the year Google finally made it happen for everyone. Of course, the Pixel 10 Pro XL got the higher base storage last year, and Pixel Folds have always started with 256GB of space. But this year marks the first time the Pixel 11 and Pixel 11 Pro have started with 256GB of storage.</p><p>Effectively this means the cheapest Pixel 11 Pro has double the amount of storage as last year's equivalent — which is perfect for storing all those files and photos you need to keep around. Though the downside is that you have to pay $100 more for the privilege this year, and won't get as much RAM.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-pixel-11-pro-xl-review-the-downs"><span>Google Pixel 11 Pro & Pixel 11 Pro XL review: The downs</span></h2><p>I know that upgrades between generations are always going to be more about the minor refinements. But the Pixel 11 Pros struggle to clear even that hurdle — all while charging $100 more and giving you less RAM at the baseline.</p><h2 id="minimal-upgrades">Minimal upgrades</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5739px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MUYMhHjP3v54WkbELp9e9W" name="Google Pixel 11 Pro XL-13" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/MUYMhHjP3v54WkbELp9e9W.jpg" mos="" align="middle" fullscreen="" width="5739" height="3228" 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>By far the biggest issue with the Pixel 11 Pro and 11 Pro XL is that the hardware has barely changed since last year. The real changes include the addition of the Tensor G6, different sensors for the cameras, replacing the thermometer sensor with HiLight and offering a brighter display on both models. </p><p>There is a new modem and the Titan M3 security chip, though these are hardly additions that will have any noticeable impact on ordinary user experience</p><p>The Pixel 11 Pro also gets the additional 256GB of base storage and 25W wireless charging, both of which were already available on the Pixel 10 Pro XL last year.</p><p>These updates are incremental at best, and considering the jump from Pixel 9 Pro to Pixel 10 Pro also featured minimal hardware changes, I had hoped that Google would offer a little more with the Pixel 11 Pro. But alas that does not seem to have been the case, and that's rather disappointing.</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="8Nb4Bg6NWTvZ3B9nWkeGrk" name="pixel1" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/8Nb4Bg6NWTvZ3B9nWkeGrk.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>HiLight is probably the most interesting Google has offered, and even that seems like a half-baked addition to the phone. The LED works really well when your phone is left face down, but it also only works for two features right now. Specifically it flashes blue when you're talking to Gemini, and one of five custom colors that will flash when a starred contact calls you. But that's all it can do right now. </p><p>Google says it will be able to do more in future, but at the moment HiLight can only flash up for these two features and in these colors. Without better customization options and support for more kinds of notifications, it comes across as a gimmick more than an actually useful feature.</p><h2 id="price-hike">Price hike</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3756px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="MZX7YvvRVUyZ3WVJv5EzZU" name="Google Pixel 11 Pro XL-8" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/MZX7YvvRVUyZ3WVJv5EzZU.jpg" mos="" align="middle" fullscreen="" width="3756" height="2113" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The other main issue with this year's batch of Pixels is that the price has gone up. It's been a long time since Pixel phones were seen as the affordable option, but the Pixel 11 series pushes that to the extreme — and it feels worse for the Pixel 11 Pro XL.</p><p>Both phones' base models are $100 more than the equivalent Pixel 10 Pro. This means the 11 Pro starts at $1,099 while the 11 Pro Xl is now $1,299. The trade off for the Pixel 11 Pro is that the base model now comes with 256GB of storage, rather than 128GB — which is a good thing. </p><p>Sadly Google already made 256GB standard on last year's Pro XL and increased the price by $100 to compensate. This year's Pro XL has no such improvement, which means the price has been increased with no additional benefit to the user.</p><h2 id="reduced-base-ram">Reduced base RAM</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4550px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="AvsWwqdVtCVpaay5Vf9gWV" name="Google Pixel 11 Pro XL-7" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/AvsWwqdVtCVpaay5Vf9gWV.jpg" mos="" align="middle" fullscreen="" width="4550" height="2559" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The other big issue is that the standard 256GB model actually comes with less RAM than the Pixel 10 Pro and 10 Pro XL. That means those of you wanting the same 16GB as last year will have to pay for a 512GB of 1TB storage model. That's obviously going to cost a fair bit more.</p><p>The 512GB Pixel 11 Pro is $1,219, while the 1TB is $1,449. For the Pixel 11 Pro XL, you'll have to pay $1,419 for 512GB and $1,649 for 1TB. It's a lot more to ask for, but it's likely down to the fact RAM prices have skyrocketed over the past several months.</p><p>Why does this matter? Because RAM is super important for running on-device AI features. Without a healthy pool of memory to work from, your device's AI prowess is going to be increasingly reliant on the cloud. Not only does this have obvious issues with privacy and data security, it also takes slightly longer to process and relies on having an active internet connection.</p><p>All of which means that buying the cheapest Pixel 11 Pro model means paying more for a phone that likely has worse AI processing performance. </p><h2 id="the-return-of-inconsistent-pixel-battery-life">The return of inconsistent Pixel 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:5389px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="HoEhoY8WFs3HigqdaBpmmV" name="Google Pixel 11 Pro XL-LIST1" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/HoEhoY8WFs3HigqdaBpmmV.jpg" mos="" align="middle" fullscreen="" width="5389" height="3031" 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>Pixel phones are not known for having strong battery life, even if things have been improving over the last few years. Sadly the Pixel 11 Pro and Pro XL barely make any progress in improving the battery life — which is not surprising considering Google added smaller battery packs this time around.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery Life (Hrs: Mins)</strong></p></td><td  ><p><strong>Charging % in 30 minutes</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro XL</strong></p></td><td  ><p>14:28</p></td><td  ><p>54%</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro XL</strong></p></td><td  ><p>14:10</p></td><td  ><p>63%</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td><td  ><p>16:10</p></td><td  ><p>77%</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>17:54</p></td><td  ><p>64%</p></td></tr></tbody></table></div><p>The Pixel 11 Pro XL lasted 14 hours and 28 minutes in our custom battery test, which involves continuous web browsing over a 5G connection. That's only eight minutes more than the Pixel 10 Pro XL's 14 hours and 10 minutes. In comparison the Galaxy S26 Ultra lasted 16 hours and 10 minutes, while the iPhone 17 Pro Max lasted even longer at 17 hours and 54 minutes.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery Life (Hrs: Mins)</strong></p></td><td  ><p><strong>Charging % in 30 minutes</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro</strong></p></td><td  ><p>13:25</p></td><td  ><p>51%</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro </strong></p></td><td  ><p>13:43</p></td><td  ><p>55%</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Plus</strong></p></td><td  ><p>13:13</p></td><td  ><p>71%%</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro </strong></p></td><td  ><p>15:21</p></td><td  ><p>72%</p></td></tr></tbody></table></div><p>The Pixel 11 Pro actually does worse than last year's Pixel 10 Pro, with a battery life of 13 hours and 25 minutes compared to the 10 Pro's 13 hours 43 minutes. This is worse than the iPhone 17 Pro's 15 hours 21 minutes, but it is better than the Galaxy S26 Plus's 13 hours 13 minutes. Sadly it also still lags behind the larger flagships — and last year's Pixels.</p><h2 id="performance-languishes-in-the-shadow-of-more-powerful-phones">Performance languishes in the shadow of more powerful phones</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5590px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="nTDHtTHnfed5HyDkXhb5iV" name="Google Pixel 11 Pro XL-5" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/nTDHtTHnfed5HyDkXhb5iV.jpg" mos="" align="middle" fullscreen="" width="5590" height="3144" 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>Pixels have never been a paragon of performance power, and the Tensor G6 is absolutely no exception to that. The general performance is better than you'd get from the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series, and the Tensor G5, but graphics performance has dropped this year. Likewise the Tensor G6 is still so far behind Samsung and Apple that it's almost as though Google isn't really trying.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench (Single/Multicore</strong></p></td><td  ><p><strong>3DMark Wildlife Extreme Unlimited</strong></p></td><td  ><p><strong>Geekbench AI</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro</strong></p></td><td  ><p>2,649 / 7,164</p></td><td  ><p>3,113 / 18.65</p></td><td  ><p>9148</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro XL</strong></p></td><td  ><p>2,713 / 7,453</p></td><td  ><p>3,249 / 19.46</p></td><td  ><p>9349</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro</strong></p></td><td  ><p>2,335 / 6,375</p></td><td  ><p>3,134 / 18.77</p></td><td  ><p>4283</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro XL</strong></p></td><td  ><p>2322 / 6,286</p></td><td  ><p>3,462 / 20.73</p></td><td  ><p>4387</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td><td  ><p>3,785 / 11,563</p></td><td  ><p>6,645 / 39.8</p></td><td  ><p>83047</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>3,871 / 9,968</p></td><td  ><p>5,855 / 35.03</p></td><td  ><p>48549</p></td></tr></tbody></table></div><p>Compared to the Pixel 10 Pro and 10 Pro XL, the 11 Pro series has had a pretty hefty boost in raw performance. Both phones offer an increase in single-core and multi-core performance using the Geekbench 6 benchmarking test. Pixel 11 Pro rose to 2,649 and 7,164 versus 2,335 and 6,375. Meanwhile, the Pixel 11 Pro Xl did a little better with 2,713 and 7,453 against the 10 Pro XL's 2,322 and 6,286.</p><p>Graphically both new phones actually did worse, with Pixel 11 Pro scoring 3,113 in the 3DMark Wildlife Extreme Unlimited benchmark, with an average framerate of 18.65. Pixel 10 Pro score 3,134 and 18.77. The Pixel 11 Pro XL came out with 3,249 and 19.46fps, while the 10 Pro XL recorded a score of 3,462 and average frame rate of 20.73 fps.</p><p>All of it pales in comparison to the Samsung Galaxy S26 Ultra and iPhone 17 Pro Max, though. In fact the Galaxy's graphics benchmark scores are roughly double that of both new Pixels. Worst of all, the Pixels' NPU scored ridiculously poorly on Geekbench's AI benchmark, with four-digit scores that pale in comparison to both Samsung and Apple's 5-digit scores. </p><p>Considering the Tensor chips are supposed to be built for AI (alongside photography and security), this is a really embarrassing result for a phone that doesn't have a lot else going for it.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-pixel-11-pro-xl-review-verdict"><span>Google Pixel 11 Pro & Pixel 11 Pro XL review: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4944px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hnQVzF33shfZucKz4TVsgV" name="Google Pixel 11 Pro vs Pixel 11 Pro XL" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/hnQVzF33shfZucKz4TVsgV.jpg" mos="" align="middle" fullscreen="" width="4944" height="2781" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Google Pixel 11 Pro and Pixel 11 Pro XL are not bad phones by any means, but they're also not anything particularly special. The upgrades Google has included do offer some enhancements compared to previous phones, but it also isn't enough to help the Pixel lineup catch up with some of its biggest rivals. Especially when you consider the 11 Pro's weaker battery life and the reduced amount of RAM on the cheapest models.</p><p>From a purely Pixel point of view, the 11 Pro and Pro XL both offer better cameras, AI features that could potentially be very useful, and a boost in overall performance. Not to mention brighter displays and increased base storage on the standard Pro model. </p><p>But at the same time the Pixel still lags behind its flagship rivals in both performance and battery life, and reduces the amount of RAM available on the cheapest models. That, combined with the $200 price hike and the meager selection of upgrades makes me think that the better purchase might actually be a Pixel 10 Pro — for as long as you can still get one, that is.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review</link>
                                                                            <description>
                            <![CDATA[ Google Pixel 11 Pro and 11 Pro XL are not bad phones by any means, but they are disappointing devices — especially compared to what rival flagships have to offer. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">iDRA3AdFCQNH5tXEAEL7Ye</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ZHdrLL2sfJwLr79MgRmeiV-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 19 Aug 2026 16:04:56 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/ZHdrLL2sfJwLr79MgRmeiV-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[pixel 11 pro and 11 pro xl review images]]></media:description>                                                            <media:text><![CDATA[pixel 11 pro and 11 pro xl review images]]></media:text>
                                <media:title type="plain"><![CDATA[pixel 11 pro and 11 pro xl review images]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ZHdrLL2sfJwLr79MgRmeiV-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I'm torn on the Pixel 11 Pro and Pixel 11 Pro XL. </p><p>While these are not exactly bad phones, it's hard not to feel disappointed about what Google has released this year. There are few noticeable upgrades on paper, and the phones themselves have endured a $100 price hike that makes the apparent lack of progress sting even more. </p><p>But there's a lot more to a phone than what we can see on a specs sheet, and I was hoping that the Pixel 11 Pro could impress me in ways that I hadn't previously anticipated. </p><p>So I've been spending time with the phones to see whether Google's latest premium phones are actually worth picking up. Sadly, like the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10a-review">Pixel 10a</a>, it turns out that this phone is just another lazy update that feels like half a step backward from last year's models.</p><p>Read on for our full Google Pixel 11 Pro and Google Pixel 11 Pro XL review.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-pixel-11-pro-xl-review-cheat-sheet"><span>Google Pixel 11 Pro & Pixel 11 Pro XL review: Cheat Sheet</span></h2><ul><li><strong>What is it?</strong> The latest Pro-tier Pixel flagships, available in regular and XL sizes set to replace the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro</a> and <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL.</a></li><li><strong>Who is it for? </strong>Those people who want the Google-led Android experience, with fast updates and a heavy focus on cameras and AI. Ideally people who haven't upgraded their phones for a few years</li><li><strong>What does it cost?</strong> Prices for the Pixel 11 Pro start at $1,099 / £1,079 / AU$1,849 while the Pixel 11 Pro XL starts at $1,299 / £1,279 / AU$2,099. Both phones offer 256GB of storage and 12GB RAM, though higher storage tiers are available with 16GB of RAM</li><li><strong>What do we like? </strong>The Pixel 11 Pro and Pro XL have the brightest screen we've tested, alongside a scratch-resistant display, excellent AI-centric features and noticeable improvements to the cameras.</li><li><strong>What don't we like? </strong>Overall this is a fairly mediocre upgrade, continuing the longstanding Pixel tradition of weak performance, unimpressive battery life, reduced RAM on the cheapest models, and very little to make it an appealing purchase for a lot of people.</li></ul><h2 class="article-body__section" id="section-google-pixel-11-pro-pixel-11-pro-xl-review-specs"><span>Google Pixel 11 Pro & Pixel 11 Pro XL review: Specs</span></h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Google Pixel 11 Pro</strong></p></th><th  ><p><strong>Google Pixel 11 Pro XL</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$1,099 / £1,079 / AU$1,849</p></td><td  ><p>$1,299 / £1,279 / AU$2,099</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3-inch 1,280 x 2,856 Super Actua (OLED)</p></td><td  ><p>6.8-inch 1,344 x 2,992 Super Actua (OLED)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>1-120Hz</p></td><td  ><p>1-120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB, 16GB</p></td><td  ><p>12GB, 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB, 1TB</p></td><td  ><p>256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP (f/1.68) main, 48MP (f/1.7) ultrawide, 48MP (f/2.8) 5x telephoto</p></td><td  ><p>50MP (f/1.68) main, 48MP (f/1.7) ultrawide, 48MP (f/2.8) 5x telephoto</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>42MP (f/2.2)</p></td><td  ><p>42MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,850 mAh</p></td><td  ><p>5,115 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speeds</strong></p></td><td  ><p>30W wired, 25W wireless</p></td><td  ><p>45W wired, 25W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Construction Rating</strong></p></td><td  ><p>IP68</p></td><td  ><p>IP68</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6 x 2.8  x 0.3 inches</p></td><td  ><p>6.4  x 3 x 0.3 inches </p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>7.2 ounces / 204g</p></td><td  ><p>8 ounces / 226g</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Canyon, Olive, Fog, Obsidian (matte)</p></td><td  ><p>Canyon, Olive, Fog, Obsidian (matte)</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-google-pixel-11-pro-pixel-11-pro-xl-review-the-ups"><span>Google Pixel 11 Pro & Pixel 11 Pro XL review: The Ups</span></h2><p>The moment I got into testing these new Pixel 11 Pros, the small refinements jumped out at me. A lot of it comes down to the software running in the background, but there is one hardware upgrade (especially in the midst of a very bright summer) that I especially appreciated.</p><h2 id="brighter-displays">Brighter displays</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4921px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nZviYLL3UTdqX3WMiYyPjV" name="Google Pixel 11 Pro vs Pixel 11 Pro XL-3" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/nZviYLL3UTdqX3WMiYyPjV.jpg" mos="" align="middle" fullscreen="" width="4921" height="2768" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Pixel 10 Pro XL was the brightest phone we ever tested with peak brightness of 2,555 nits. Recently the phone was beaten by the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra's</a> 2,687 nits. Well now it seems the Pixel 11 Pro XL has reclaimed that title, with peak brightness of 2,877 nits — closely followed by the Pixel 11 Pro's 2,860 nits.</p><p>That's well in excess of the<a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review"> iPhone 17 Pro Max's</a> 1,281 nits brightness, and the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra's </a>1,806 nits. This ensures that the 11 Pro and Pro XL excel in brighter conditions, which I am currently plagued by in the heat of August. That being said, they do lack the anti-reflective display of the Galaxy Z Fold 8 Ultra and S26 Ultra.</p><p>Both Pro models do come with a special anti-scratch display, which should help prevent mini scratches from appearing when you're looking at the screen under bright light. While I haven't deliberately tried to scratch up the screens, I haven't noticed any of them mysteriously appear, either.</p><h2 id="cameras-have-improved">Cameras have improved</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5466px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="A7BH3wKbnA66d9kq43NxzV" name="Google Pixel 11 Pro XL-1" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/A7BH3wKbnA66d9kq43NxzV.jpg" mos="" align="middle" fullscreen="" width="5466" height="3075" 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>At first glance, the Pixel 11 Pro and Pro XL's cameras don't seem to have changed all that much compared to last year — but that's not the case. </p><p>The main camera and selfie cameras are functionally identical, that much is true, but the ultrawide and telephoto lenses have gained new larger sensors. While the Pixel 11 Pro misses the mark in a lot of areas, the camera quality is not one of them.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=f880881c-9b1c-11f1-ba1b-0e6f42328d7d"></iframe><p>The main camera lens is capable of going head to head with the Galaxy S26 Ultra's 200MP main camera, despite the obvious gap in resolution. The colors are a little more vivid on the Pixel, but the overall quality is fairly equal - to the point where you can see a lot of similar grain when you zoom in on the printed lettering.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=70ce47a0-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>The quality of the ultrawide seems fairly equal to the Pixel 10 Pro at first glance, but look a little closer and you can see that the Pixel 11 Pro's picture is a lot sharper. Whether that will affect casual appreciation of ultrawide-angle photos isn't clear, but it shows that Pixel 11 Pro is putting the larger camera sensor and Tensor G6 to good use.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=8892693e-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>It's a similar situation with the telephoto lens at 5x magnification. At first glance they don't seem all that different, but close in and you can see that the general quality on the Pixel 11 Pro's photo is clearer and sharper.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=a11dcc96-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>That's more noticeable at 10x magnification, with the Pixel 11 Pro XL's 10x "optical quality" camera picking up a lot more of the smaller details than the 10 Pro XL.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=cc5608b6-9b1c-11f1-ba1b-0e6f42328d7d"></iframe><p>The AI-enhanced 120x zoom is where Google's AI capabilities really shine, especially compared to Samsung's 100x zoom capabilities. Despite offering 20% more magnification than Samsung, the 11 Pro managed to create a much-clearer image than Samsung does - with brighter colors and a lot more detail. </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:4080px;"><p class="vanilla-image-block" style="padding-top:75.10%;"><img id="FYftCAQ5rb993bcE8z8f3m" name="PXL_20260815_144111397.BURST-02.original" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/FYftCAQ5rb993bcE8z8f3m.jpg" mos="" align="middle" fullscreen="" width="4080" height="3064" 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>But that's not just the AI, the unenhanced version of the photo (above) also looks a heck of a lot better than what Samsung managed to create with AI help.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=3b26666e-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>The quality of the selfie camera is generally fine, but they don't even come close to the detail afforded by the iPhone 17 Pro Max. The iPhone camera manages to pick up a lot more of the smaller details, and doesn't make me look like a vampire that's never seen sunlight before.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=1fc2cffc-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>It's very much the same situation with Portrait mode. However I prefer Google's bokeh effect, especially with how it singles my head out without offering quite so much blurring around the edges.</p><iframe allow="" height="452" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=56827a88-9b1d-11f1-ba1b-0e6f42328d7d"></iframe><p>Low light quality is also pretty admirable, though the pictures often came out slightly darker than they did with the Pixel 10 Pro. I'd say that the 11 Pro produces a better picture, and the Instant Night Sight feature does make the process of low-light photography a lot easier to pull off.</p><p>That said, the process isn't actually instant. The camera still needs two seconds to shoot a photo, rather than the three to six seconds required by Night Sight on the Pixel 10 Pro. Still, it's amazing how much of a difference even a single second can make to the photography process — and that third second feels so much longer.</p><h2 id="cool-new-software-features">Cool new software features</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4583px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="N4jn57zhtSRfZnAScWkjiV" name="Google Pixel 11 Pro XL-6" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/N4jn57zhtSRfZnAScWkjiV.jpg" mos="" align="middle" fullscreen="" width="4583" height="2578" 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 aren't a whole lot of new software features coming to Pixel this year, but the ones that have been released are pretty impressive. The main trio include the Rambler dictation software, Magic Capture in the camera and Live Translate for media — though that's limited to YouTube videos for the time being.</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="YvbLS83tC8zPiUxMw97K3m" name="pixel2" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/YvbLS83tC8zPiUxMw97K3m.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>Magic Capture might just be my favorite, since it lets you record video of a situation and uses AI to identify which frames are actually worth keeping. </p><p>In other words it's a great way to get photos of moving targets, like children or pets, without having to try and time your shutter with the perfect situation. It's kind of like an alternative to a burst mode, which the Pixel 11 doesn't have, but instead of recording a series of still images, you get a short video clip instead.</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="8BKSBVCJP4Ld6wZWQSJhvk" name="pixel3" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/8BKSBVCJP4Ld6wZWQSJhvk.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>Live Translate is also pretty impressive, since it will automatically translate videos you're watching in real time. I have seen features like this on other phones, including the <a href="https://www.tomsguide.com/phones/android-phones/xiaomi-15-ultra-review-an-excellent-phone-you-probably-cant-buy">Xiaomi 15 Ultra</a>, but always found them to be a little finicky. </p><p>Google's version seems to work in a much simpler way, so long as you've downloaded the appropriate language packs in the system settings. The feature only works with YouTube right now, but once you load up the appropriate foreign-language video, you'll see a pop-up offering to translate the page — similar to how you would in a web browser.</p><p>Once the translation mechanism is engaged, it will feed you an English-version of whatever is said on screen while preserving some sense of accent and realism. In other words it's not a robotic AI voice that you'll find in some parts of the internet. I tried it in French and Spanish, and found that it worked pretty well — though the AI did fumble at times due to the speed at which some Spanish people speak.</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="8N2vMrHBSKbWGTvgkD6hok" name="pixel4" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/8N2vMrHBSKbWGTvgkD6hok.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>Rambler is also very interesting because it completely redesigns the voice-to-text feature in the Gboard app. I recently <a href="https://www.tomsguide.com/phones/iphones/ios-27-beta-has-new-and-improved-dictation-software-i-tested-it-by-writing-this-whole-article-with-my-voice">tested Gboard against iOS 27 beta's dictation capabilities</a> and found that they were at a very similar level. Rambler blows them both out of the water. </p><p>Not only was it able to figure out all the verbal tics humans add to speech, and ignore them, it's able to differentiate between voice typing and giving it commands.</p><p>Better still it could go back and make alterations to existing text, which is not something I've seen freely-available dictation software do before. I may be a big fan of traditional ways of typing (mostly pen and paper), but my early experience with Rambler could make a good attempt at changing that.</p><h2 id="256gb-on-the-pro">256GB on the Pro</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5859px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="R9Hx3vM2CpLJyNdwcf5BtV" name="Google Pixel 11 Pro vs Pixel 11 Pro XL-4" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/R9Hx3vM2CpLJyNdwcf5BtV.jpg" mos="" align="middle" fullscreen="" width="5859" height="3296" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I've spent years complaining that 128GB of base storage was no longer enough, and this year is the year Google finally made it happen for everyone. Of course, the Pixel 10 Pro XL got the higher base storage last year, and Pixel Folds have always started with 256GB of space. But this year marks the first time the Pixel 11 and Pixel 11 Pro have started with 256GB of storage.</p><p>Effectively this means the cheapest Pixel 11 Pro has double the amount of storage as last year's equivalent — which is perfect for storing all those files and photos you need to keep around. Though the downside is that you have to pay $100 more for the privilege this year, and won't get as much RAM.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-pixel-11-pro-xl-review-the-downs"><span>Google Pixel 11 Pro & Pixel 11 Pro XL review: The downs</span></h2><p>I know that upgrades between generations are always going to be more about the minor refinements. But the Pixel 11 Pros struggle to clear even that hurdle — all while charging $100 more and giving you less RAM at the baseline.</p><h2 id="minimal-upgrades">Minimal upgrades</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5739px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MUYMhHjP3v54WkbELp9e9W" name="Google Pixel 11 Pro XL-13" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/MUYMhHjP3v54WkbELp9e9W.jpg" mos="" align="middle" fullscreen="" width="5739" height="3228" 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>By far the biggest issue with the Pixel 11 Pro and 11 Pro XL is that the hardware has barely changed since last year. The real changes include the addition of the Tensor G6, different sensors for the cameras, replacing the thermometer sensor with HiLight and offering a brighter display on both models. </p><p>There is a new modem and the Titan M3 security chip, though these are hardly additions that will have any noticeable impact on ordinary user experience</p><p>The Pixel 11 Pro also gets the additional 256GB of base storage and 25W wireless charging, both of which were already available on the Pixel 10 Pro XL last year.</p><p>These updates are incremental at best, and considering the jump from Pixel 9 Pro to Pixel 10 Pro also featured minimal hardware changes, I had hoped that Google would offer a little more with the Pixel 11 Pro. But alas that does not seem to have been the case, and that's rather disappointing.</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="8Nb4Bg6NWTvZ3B9nWkeGrk" name="pixel1" alt="google pixel 11 pro review different features showcased" src="https://cdn.mos.cms.futurecdn.net/8Nb4Bg6NWTvZ3B9nWkeGrk.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>HiLight is probably the most interesting Google has offered, and even that seems like a half-baked addition to the phone. The LED works really well when your phone is left face down, but it also only works for two features right now. Specifically it flashes blue when you're talking to Gemini, and one of five custom colors that will flash when a starred contact calls you. But that's all it can do right now. </p><p>Google says it will be able to do more in future, but at the moment HiLight can only flash up for these two features and in these colors. Without better customization options and support for more kinds of notifications, it comes across as a gimmick more than an actually useful feature.</p><h2 id="price-hike">Price hike</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3756px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="MZX7YvvRVUyZ3WVJv5EzZU" name="Google Pixel 11 Pro XL-8" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/MZX7YvvRVUyZ3WVJv5EzZU.jpg" mos="" align="middle" fullscreen="" width="3756" height="2113" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The other main issue with this year's batch of Pixels is that the price has gone up. It's been a long time since Pixel phones were seen as the affordable option, but the Pixel 11 series pushes that to the extreme — and it feels worse for the Pixel 11 Pro XL.</p><p>Both phones' base models are $100 more than the equivalent Pixel 10 Pro. This means the 11 Pro starts at $1,099 while the 11 Pro Xl is now $1,299. The trade off for the Pixel 11 Pro is that the base model now comes with 256GB of storage, rather than 128GB — which is a good thing. </p><p>Sadly Google already made 256GB standard on last year's Pro XL and increased the price by $100 to compensate. This year's Pro XL has no such improvement, which means the price has been increased with no additional benefit to the user.</p><h2 id="reduced-base-ram">Reduced base RAM</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4550px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="AvsWwqdVtCVpaay5Vf9gWV" name="Google Pixel 11 Pro XL-7" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/AvsWwqdVtCVpaay5Vf9gWV.jpg" mos="" align="middle" fullscreen="" width="4550" height="2559" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The other big issue is that the standard 256GB model actually comes with less RAM than the Pixel 10 Pro and 10 Pro XL. That means those of you wanting the same 16GB as last year will have to pay for a 512GB of 1TB storage model. That's obviously going to cost a fair bit more.</p><p>The 512GB Pixel 11 Pro is $1,219, while the 1TB is $1,449. For the Pixel 11 Pro XL, you'll have to pay $1,419 for 512GB and $1,649 for 1TB. It's a lot more to ask for, but it's likely down to the fact RAM prices have skyrocketed over the past several months.</p><p>Why does this matter? Because RAM is super important for running on-device AI features. Without a healthy pool of memory to work from, your device's AI prowess is going to be increasingly reliant on the cloud. Not only does this have obvious issues with privacy and data security, it also takes slightly longer to process and relies on having an active internet connection.</p><p>All of which means that buying the cheapest Pixel 11 Pro model means paying more for a phone that likely has worse AI processing performance. </p><h2 id="the-return-of-inconsistent-pixel-battery-life">The return of inconsistent Pixel 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:5389px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="HoEhoY8WFs3HigqdaBpmmV" name="Google Pixel 11 Pro XL-LIST1" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/HoEhoY8WFs3HigqdaBpmmV.jpg" mos="" align="middle" fullscreen="" width="5389" height="3031" 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>Pixel phones are not known for having strong battery life, even if things have been improving over the last few years. Sadly the Pixel 11 Pro and Pro XL barely make any progress in improving the battery life — which is not surprising considering Google added smaller battery packs this time around.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery Life (Hrs: Mins)</strong></p></td><td  ><p><strong>Charging % in 30 minutes</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro XL</strong></p></td><td  ><p>14:28</p></td><td  ><p>54%</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro XL</strong></p></td><td  ><p>14:10</p></td><td  ><p>63%</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td><td  ><p>16:10</p></td><td  ><p>77%</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>17:54</p></td><td  ><p>64%</p></td></tr></tbody></table></div><p>The Pixel 11 Pro XL lasted 14 hours and 28 minutes in our custom battery test, which involves continuous web browsing over a 5G connection. That's only eight minutes more than the Pixel 10 Pro XL's 14 hours and 10 minutes. In comparison the Galaxy S26 Ultra lasted 16 hours and 10 minutes, while the iPhone 17 Pro Max lasted even longer at 17 hours and 54 minutes.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery Life (Hrs: Mins)</strong></p></td><td  ><p><strong>Charging % in 30 minutes</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro</strong></p></td><td  ><p>13:25</p></td><td  ><p>51%</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro </strong></p></td><td  ><p>13:43</p></td><td  ><p>55%</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Plus</strong></p></td><td  ><p>13:13</p></td><td  ><p>71%%</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro </strong></p></td><td  ><p>15:21</p></td><td  ><p>72%</p></td></tr></tbody></table></div><p>The Pixel 11 Pro actually does worse than last year's Pixel 10 Pro, with a battery life of 13 hours and 25 minutes compared to the 10 Pro's 13 hours 43 minutes. This is worse than the iPhone 17 Pro's 15 hours 21 minutes, but it is better than the Galaxy S26 Plus's 13 hours 13 minutes. Sadly it also still lags behind the larger flagships — and last year's Pixels.</p><h2 id="performance-languishes-in-the-shadow-of-more-powerful-phones">Performance languishes in the shadow of more powerful phones</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5590px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="nTDHtTHnfed5HyDkXhb5iV" name="Google Pixel 11 Pro XL-5" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/nTDHtTHnfed5HyDkXhb5iV.jpg" mos="" align="middle" fullscreen="" width="5590" height="3144" 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>Pixels have never been a paragon of performance power, and the Tensor G6 is absolutely no exception to that. The general performance is better than you'd get from the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series, and the Tensor G5, but graphics performance has dropped this year. Likewise the Tensor G6 is still so far behind Samsung and Apple that it's almost as though Google isn't really trying.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench (Single/Multicore</strong></p></td><td  ><p><strong>3DMark Wildlife Extreme Unlimited</strong></p></td><td  ><p><strong>Geekbench AI</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro</strong></p></td><td  ><p>2,649 / 7,164</p></td><td  ><p>3,113 / 18.65</p></td><td  ><p>9148</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro XL</strong></p></td><td  ><p>2,713 / 7,453</p></td><td  ><p>3,249 / 19.46</p></td><td  ><p>9349</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro</strong></p></td><td  ><p>2,335 / 6,375</p></td><td  ><p>3,134 / 18.77</p></td><td  ><p>4283</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro XL</strong></p></td><td  ><p>2322 / 6,286</p></td><td  ><p>3,462 / 20.73</p></td><td  ><p>4387</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td><td  ><p>3,785 / 11,563</p></td><td  ><p>6,645 / 39.8</p></td><td  ><p>83047</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>3,871 / 9,968</p></td><td  ><p>5,855 / 35.03</p></td><td  ><p>48549</p></td></tr></tbody></table></div><p>Compared to the Pixel 10 Pro and 10 Pro XL, the 11 Pro series has had a pretty hefty boost in raw performance. Both phones offer an increase in single-core and multi-core performance using the Geekbench 6 benchmarking test. Pixel 11 Pro rose to 2,649 and 7,164 versus 2,335 and 6,375. Meanwhile, the Pixel 11 Pro Xl did a little better with 2,713 and 7,453 against the 10 Pro XL's 2,322 and 6,286.</p><p>Graphically both new phones actually did worse, with Pixel 11 Pro scoring 3,113 in the 3DMark Wildlife Extreme Unlimited benchmark, with an average framerate of 18.65. Pixel 10 Pro score 3,134 and 18.77. The Pixel 11 Pro XL came out with 3,249 and 19.46fps, while the 10 Pro XL recorded a score of 3,462 and average frame rate of 20.73 fps.</p><p>All of it pales in comparison to the Samsung Galaxy S26 Ultra and iPhone 17 Pro Max, though. In fact the Galaxy's graphics benchmark scores are roughly double that of both new Pixels. Worst of all, the Pixels' NPU scored ridiculously poorly on Geekbench's AI benchmark, with four-digit scores that pale in comparison to both Samsung and Apple's 5-digit scores. </p><p>Considering the Tensor chips are supposed to be built for AI (alongside photography and security), this is a really embarrassing result for a phone that doesn't have a lot else going for it.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-pixel-11-pro-xl-review-verdict"><span>Google Pixel 11 Pro & Pixel 11 Pro XL review: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4944px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hnQVzF33shfZucKz4TVsgV" name="Google Pixel 11 Pro vs Pixel 11 Pro XL" alt="pixel 11 pro and 11 pro xl review images" src="https://cdn.mos.cms.futurecdn.net/hnQVzF33shfZucKz4TVsgV.jpg" mos="" align="middle" fullscreen="" width="4944" height="2781" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Google Pixel 11 Pro and Pixel 11 Pro XL are not bad phones by any means, but they're also not anything particularly special. The upgrades Google has included do offer some enhancements compared to previous phones, but it also isn't enough to help the Pixel lineup catch up with some of its biggest rivals. Especially when you consider the 11 Pro's weaker battery life and the reduced amount of RAM on the cheapest models.</p><p>From a purely Pixel point of view, the 11 Pro and Pro XL both offer better cameras, AI features that could potentially be very useful, and a boost in overall performance. Not to mention brighter displays and increased base storage on the standard Pro model. </p><p>But at the same time the Pixel still lags behind its flagship rivals in both performance and battery life, and reduces the amount of RAM available on the cheapest models. That, combined with the $200 price hike and the meager selection of upgrades makes me think that the better purchase might actually be a Pixel 10 Pro — for as long as you can still get one, that is.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 Pro Fold review: Falling behind the foldable curve ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Four generations in, Google's foldable phone experiment should be hitting its stride — right? When the original <a href="https://www.tomsguide.com/reviews/google-pixel-fold">Pixel Fold</a> arrived, it was the company’s opportunity to move outside its usual stable of slab phones into something much more exciting. We’re now at the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro Fold</a>, which, more than ever, can’t afford to come up short.</p><p>Google no longer has the luxury of being graded on a curve. Having tested the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> over the last six months alone, I know this space is a fiercely contested battleground, with rival devices like the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a>, and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a> vying for consumer attention.</p><p>While class-leading hardware has never been the line’s biggest strength, Google has taken a different approach by doubling down on its outstanding AI features. In my Google Pixel 11 Pro Fold review, you’ll see if it has the hardware, software, and performance to come out on top. But make no mistake: it needs to be firing on all cylinders, because even the smartest software can't stop the Pixel 11 Pro Fold from slipping behind the pace.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-specifications"><span>Google Pixel 11 Pro Fold review: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>6.5-inch OLED (1,080 x 2,342)</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong></p></td><td  ><p>8-inch OLED (2,076 x 2,152)</p></td></tr><tr><td class="firstcol " ><p><strong>Chip</strong></p></td><td  ><p>Google Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP wide, 10.5MP ultrawide with Macro Focus, 10.8MP 5x telephoto (up to 30x Super Zoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie cameras</strong></p></td><td  ><p>10MP (inner), 10MP (cover)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,806 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Wired/Wireless Charging</strong></p></td><td  ><p>30W, 25W</p></td></tr><tr><td class="firstcol " ><p><strong>Size open</strong></p></td><td  ><p>155.2 × 150.4 × 5.0 mm (6.1 × 5.9 × 0.2 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Size closed</strong></p></td><td  ><p>155.2 × 76.0 × 10.1 mm (6.1 × 3.0 × 0.4 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>239 grams (8.4 ounces)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Obsidian, Olive</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-price-and-release"><span>Google Pixel 11 Pro Fold review: Price and release</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4708px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xsfMKvL7nZzF9gFXgA5yw7" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold held in the hand.." src="https://cdn.mos.cms.futurecdn.net/xsfMKvL7nZzF9gFXgA5yw7.jpg" mos="" align="middle" fullscreen="" width="4708" height="2648" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The Google Pixel 11 Pro Fold officially arrives on August 20, but it costs $100 more than last year’s model — pushing the starting price to a steep $1,899 for the base 256GB version.</p><p>While no one likes seeing a price hike, it still manages to undercut key rivals like the Motorola Razr Fold and Galaxy Z Fold 8 Ultra. Considering this is the first time Google's foldable line has seen a price bump, and that it still rings in cheaper than other book-style flagships, the markup isn't an outright dealbreaker.</p><p>Just like previous generations, color choices remain minimalist: Obsidian and Olive.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORMRJW"></div>                            </div>                            <script src="https://kwizly.com/embed/ORMRJW.js" async></script><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-design"><span>Google Pixel 11 Pro Fold review: Design</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5788px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jFhHFAdoKPWNdJ7X9Y6pi8" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold showing main display." src="https://cdn.mos.cms.futurecdn.net/jFhHFAdoKPWNdJ7X9Y6pi8.jpg" mos="" align="middle" fullscreen="" width="5788" height="3256" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>At first glance, the Pixel 11 Pro Fold doesn't look all that different, sticking closely to the design language Google established over the past couple of generations. But where it truly pulls ahead is durability. By retaining its rare IP68 rating, it offers superior dust-tight protection alongside submersion resistance — so yeah, it’s ready for beach outings, unlike the IP48-rated Galaxy Z Fold 8 Ultra.</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:4745px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="c5rjuNGUjRfGnbiKHbRYx7" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold opened up." src="https://cdn.mos.cms.futurecdn.net/c5rjuNGUjRfGnbiKHbRYx7.jpg" mos="" align="middle" fullscreen="" width="4745" height="2669" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Yet despite that durability win, the design still lacks the high-end refinement found on its closest rivals. It remains noticeably thicker in hand than Samsung's ultra-sleek powerhouse, the bezels framing both displays are wider, and the inner screen still exhibits a deeper crease.</p><p>Google nails the ruggedness, but on pure ergonomics and fit-and-finish, it still feels a step behind the curve.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-display"><span>Google Pixel 11 Pro Fold review: Display</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4386px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HHuzCrwnvoE5LXf7crCnx7" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold playing video." src="https://cdn.mos.cms.futurecdn.net/HHuzCrwnvoE5LXf7crCnx7.jpg" mos="" align="middle" fullscreen="" width="4386" height="2467" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Setting a new record, the Pixel 11 Pro Fold features the brightest screen of any foldable phone that has passed through the <a href="https://www.tomsguide.com/reference/how-toms-guide-tests-and-reviews-smartphones">Tom’s Guide labs</a> — reaching a blinding peak brightness of 2,982 nits on its main 8-inch Super Actua Flex display.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Peak Brightness</strong><br><strong>(Nits)</strong></p></td><td  ><p><strong>Color</strong><br><strong>(DCI-P3)</strong></p></td><td  ><p><strong>Accuracy</strong><br><strong>(Delta-E)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>2,982</p></td><td  ><p>82.1% / 72.2% (Adaptive / Natural)</p></td><td  ><p>0.31 / 0.26<br>(Adaptive / Natural)</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>2,687</p></td><td  ><p>95.3% / 82.6% (Vivid / Natural)</p></td><td  ><p>0.27 / 0.2 (Vivid / Natural)</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>2,192</p></td><td  ><p>88.5% / 159.6% (Natural / Vivid)</p></td><td  ><p>0.20 / 0.35 (Natural / Vivid)</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro Fold</strong></p></td><td  ><p>2,566</p></td><td  ><p>74% / 86.5% (Natural / Adaptive)</p></td><td  ><p>0.25 / 0.34 (Natural / Adaptive)</p></td></tr></tbody></table></div><p>Whether I’m scrolling through reels or working across two apps simultaneously, the main screen doesn’t disappoint, delivering crisp detail, vibrant colors, and outstanding outdoor visibility. Its 6.5-inch outer cover screen is equally impressive.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/pAjGRnJpnro4uAahWNUHd8.jpg" alt="Google Pixel 11 Pro Fold review." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/raXtE5rouXtuWrwaFif8d8.jpg" alt="Google Pixel 11 Pro Fold review." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RfRYezSPXFX4nSpQs35xC8.jpg" alt="Google Pixel 11 Pro Fold review." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>The only thing that continues to irk me is how underutilized that outer display remains when the phone is propped up in tabletop or tent mode. While rivals have embraced dedicated desk-clock and smart display standby experiences — like what I get on the Motorola Razr Fold — the Pixel 11 Pro Fold fails to offer a proper StandBy mode on its cover screen. The closest it gets is the basic ambient screen that kicks in when placed on a wireless charging dock.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-cameras"><span>Google Pixel 11 Pro Fold review: Cameras</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4612px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="2KaDnKYHnT8qLpRUUQ5kh7" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold taking a photo." src="https://cdn.mos.cms.futurecdn.net/2KaDnKYHnT8qLpRUUQ5kh7.jpg" mos="" align="middle" fullscreen="" width="4612" height="2594" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>On paper, the camera setup on the Pixel 11 Pro Fold looks almost identical to last year's model. You get a triple rear system consisting of a 48MP main camera, 10.5MP ultrawide, and 10.8MP telephoto with 5x optical zoom. That telephoto lens continues to be a major standout, offering the longest native optical reach on any book-style foldable. Both the cover display and the inner screen house identical 10MP selfie cameras.</p><p>Despite the familiar spec sheet, Google has swapped in a new primary sensor that reportedly captures more light for improved low-light and Night Sight performance, while the revamped telephoto setup now extends digital reach up to 30x Super Res Zoom.</p><p>Over on the software side, I’m ecstatic about the updates that make the camera app far more robust. For instance, new Camera Looks apply professional-grade film styles for a distinct aesthetic, while handy quick controls give instant access to manual parameters like exposure, focus, and ISO.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/zvSFpGodiusTVHvuSx5rTU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ZcZKR3reeAZf7BtdosaPEF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dBCcfaR6KyWtukT7vQsWTU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/p3fzSKLuAULQSUGzbUkEBF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/D3SRNmbU8RB8Qz2xu3wRhT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/aDkd7obUG4GeUxQzsrP7DF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ScJZ9p4Ne9nA9qwYJbmAuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sZxewSqtENfmsbjCfN52EF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KsQDSzFgd778NvAW2TTxuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/teshgy3PHFkduTKKHxxFFF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QjdHuZcsHUmmuX6WWyUzLT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ezJbDdhavLv4uqGY78nUCF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Unfortunately, my low-light snapshots contradict Google’s claims. Just browse through the gallery above to see what I mean — quite frankly, the differences between the Pixel 11 Pro Fold and Pixel 10 Pro Fold are minimal. Across exposure, fine detail, and clarity, the Pixel 11 Pro Fold simply doesn't offer any dramatic gains.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/XisHF4r9UcA6xo6mxvqvRT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/PSUaFL7GuWEKSUK4ccHTh.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Samsung Galaxy Z Fold 8 Ultra.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/azg8C6Kwgx4sQgKrcmave7.jpg" alt="Motorola Razr Fold camera sample." /><figcaption>Motorola Razr Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Despite boasting the longest native optical reach, the Pixel 11 Pro Fold proves that hardware specs alone can’t guarantee the sharpest telephoto results. Even though the Pixel's 30x snapshot manages to edge out the Galaxy Z Fold 8 Ultra, the Razr Fold’s superior computational photography and AI enhancements deliver class-leading clarity, rendering the roof shingles and foreground brush with noticeably finer definition.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/eMmm53bfgmDEtzFSYozQXT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/aZdupmmy6Wby3pQFYivZq.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Samsung Galaxy Z Fold 8 Ultra.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/pZtYxdBLrHDhoW7fmx6mk7.jpg" alt="Motorola Razr Fold camera sample." /><figcaption>Motorola Razr Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Here’s another example of how the Pixel 11 Pro Fold stacks up against its rivals at 30x zoom. This time, I pointed them at a distant sign to see how effectively each phone cleans up the shot.</p><p>Once again, the Razr Fold surprised me by leveraging superior AI upscaling to carve out sharp text edges and rich wood-grain definition. Still, Google's 30x Super Res Zoom easily outperforms the Galaxy Z Fold 8 Ultra, which falters with aggressive digital noise and muddier textures across the fence.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/j9hQ93kBE6EKfmnvscRExU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ucrhdyfHuB5kYjuJZ5Ghs.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Samsung Galaxy Z Fold 8 Ultra.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/uQNtrg7UZ4kJC3Gz6GKFn7.jpg" alt="Motorola Razr Fold camera sample." /><figcaption>Motorola Razr Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>For pure color accuracy and balanced exposure, the Pixel 11 Pro Fold comfortably captures the most authentic snapshot of the floral arrangement above. It delivers remarkably true-to-life color temperature and natural saturation, allowing the yellow sunflowers and deep pink carnations to pop without blowing out subtle highlight details on the petals.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/TUUFjjbUkTi37uBx6izAuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6Ya5bxFwkzcKW4DgNPLzp.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Samsung Galaxy Z Fold 8 Ultra.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WJ9K42R7mPvY3EohXTTdh7.jpg" alt="Motorola Razr Fold camera sample." /><figcaption>Motorola Razr Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>When it comes to framing quick portraits, I recommend sticking to the cover screen camera, as it produces noticeably better results than the inner shooter. Under tricky indoor restaurant lighting, the Pixel 11 Pro Fold's 10MP outer selfie camera captures the most lifelike skin tones, authentic facial texture, and natural contrast of the bunch. While the Razr Fold tends to overexpose and soften fine facial features, and the Galaxy Z Fold 8 Ultra leans noticeably warm, Google's color tuning and computational processing make for clean, well-balanced shots every time.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/D6oRZAzXR9bUF9ZDjMzjzU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/REJqY5LhiRZbbLZ3S6fRJT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GQecG5pGp5BCfw6mRoWKzU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6bvyikrrzqvE7gZ7DWddxU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/j9hQ93kBE6EKfmnvscRExU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RhXZgiBHuu3EmaXyNCS4xU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dw77WQpHwjLAdHjbpHD5wU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6tZEDXCn8KTvQhVtMbWevU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KsQDSzFgd778NvAW2TTxuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Sur7aQ8wEbYmkUxvzT5yuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ScJZ9p4Ne9nA9qwYJbmAuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/TUUFjjbUkTi37uBx6izAuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KFzrBcZ588u8WFhLTDh4uU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JyiChSL4mt9SFHnyAZjjtU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/njwaJQA5wheqQoXvPyLUtU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/v9wbgtPLHjw6WhbYJdETsU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/b88GaKNYQMEpVpNsRHy2eU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zvSFpGodiusTVHvuSx5rTU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dBCcfaR6KyWtukT7vQsWTU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/rMXRiHt26tC5kRzSkYmpKU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/heVrDQnmWi7nBS9q2tss4U.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RPLEkwbs7cqsR9muFH8s2U.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/qXaXy27u4TJeYEVsmjMioT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/mWzJUr6cEcLv9UfhH4BhnT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/D3SRNmbU8RB8Qz2xu3wRhT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/eMmm53bfgmDEtzFSYozQXT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XisHF4r9UcA6xo6mxvqvRT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QjdHuZcsHUmmuX6WWyUzLT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:640px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="ffnQHSp4AyfDebwpUvn5ij" name="Pixel 11 Pro Fold review - AI features" alt="Pixel 11 Pro Fold review - AI features." src="https://cdn.mos.cms.futurecdn.net/ffnQHSp4AyfDebwpUvn5ij.gif" mos="" align="middle" fullscreen="" width="640" height="480" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Another standout addition to the camera experience is Magic Capture, which takes the stress out of trying to nail the perfect action shot in real time. Instead of forcing you to choose between shooting a video or firing off a burst of photos, Magic Capture continuously records short clips while the phone analyzes every frame behind the scenes.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/53u5eM99eF9i5smMzzjDtU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/BLc2m3CMg83E7hravDGWbU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/boFiAbm2rixxXpYSqg8XbU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xbr2ej5L7BUtTVRkuRadnU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/FdgexU6o9iYR3fWtPkfgnU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>It automatically detects peak moments — spotting genuine smiles, sharp motion freeze, and open eyes — to extract high-resolution stills straight from the footage. Even when I had someone else record my shameless inspection of the apple section at Trader Joe’s, Magic Capture worked exactly as intended, consistently plucking sharp, print-worthy stills from the video without any extra effort on my part.</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:4795px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZUiy4Wz9d7BSLUsQc7bSH8" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold creator mode." src="https://cdn.mos.cms.futurecdn.net/ZUiy4Wz9d7BSLUsQc7bSH8.jpg" mos="" align="middle" fullscreen="" width="4795" height="2697" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Content creators and solo vloggers will adore the new Creator Mode, which transforms the foldable into a self-contained production studio. The standout perk is the built-in teleprompter tool, which scrolls through my script smoothly across the display at customizable speeds and text sizes, keeping my eye line locked directly onto the lens.</p><p>Best of all, Google took full advantage of the dual-screen form factor because Creator Mode seamlessly supports the cover screen paired with the flagship rear cameras. It completely eliminates the need for a dedicated camera operator or a secondary monitor, making solo video production faster, sharper, and far more intuitive.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-performance"><span>Google Pixel 11 Pro Fold review: Performance</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5224px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="BbYPuc5DbUMVk7XfQBZCt7" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold review." src="https://cdn.mos.cms.futurecdn.net/BbYPuc5DbUMVk7XfQBZCt7.jpg" mos="" align="middle" fullscreen="" width="5224" height="2938" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Benchmark tests reveal that Google’s latest chipset, the Tensor G6, continues to trail behind key rivals powered by Apple’s A19 Pro and Qualcomm’s Snapdragon 8 Elite Gen 5. While I don’t place a lot of emphasis on synthetic benchmarks — since they don’t always translate directly to real-world performance — they remain ideal for comparing objective processing performance.</p><p>In Geekbench 6, the Pixel 11 Pro Fold delivers a single-core score of 2,687 and a multicore result of 7,381. While those marks represent a modest bump over the Pixel 10 Pro Fold, they're far from the chart-topping numbers posted by competing flagships. Thankfully, real-world operation tells a smoother story: day-to-day use exhibits snappy app launches, fluid split-screen multitasking, and effortless navigation across the UI.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Chipset</strong></p></td><td  ><p><strong>Geekbench 6 (single / multi-core)</strong></p></td><td  ><p><strong>3DMark Wild Life Unlimited (fps)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>2,687 / 7,381</p></td><td  ><p>87.56</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>Snapdragon 8 Gen 5</p></td><td  ><p>2,711 / 9,134</p></td><td  ><p>129.23</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong>   </p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td><td  ><p>3,733 / 11,457</p></td><td  ><p>123.83</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro Fold</strong></p></td><td  ><p>Tensor G5</p></td><td  ><p>2,334 / 6,332  </p></td><td  ><p>79.68</p></td></tr></tbody></table></div><p>Graphics processing sees a marginal boost as well, with 3DMark’s Wild Life Unlimited benchmark yielding an overall score of 14,623 and an average frame rate of 87.56 fps. I loaded up my go-to test titles, including Age of Origins and Diablo Immortal, and both ran smoothly on the massive 8-inch canvas without any major hiccups or stutter.</p><p>While Tensor silicon has historically prioritized on-device AI efficiency and computational smarts over raw benchmark supremacy, I still would have liked to see Google close the gap with its direct competitors at this price point.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-battery-and-charging"><span>Google Pixel 11 Pro Fold review: Battery and charging</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3962px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Xon7bPhGo25KswkshzRVw6" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold thinness." src="https://cdn.mos.cms.futurecdn.net/Xon7bPhGo25KswkshzRVw6.jpg" mos="" align="middle" fullscreen="" width="3962" height="2229" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>In our custom battery drain test, the Pixel 11 Pro Fold clocks an average time of 12 hours and 31 minutes — a modest 15-minute bump over the Pixel 10 Pro Fold. That’s one of the slimmest year-over-year gains I’ve seen in a while, doing little to bolster its overall value proposition. Still, while it doesn't dethrone the longest-lasting foldables on the market, 12.5 hours is more than enough to get me through a full day of typical use.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery size (mAh)</strong></p></td><td  ><p><strong>Battery life (hrs:mins)</strong></p></td><td  ><p><strong>Charging % in 15 minutes</strong></p></td><td  ><p><strong>Charging % in 30 minutes</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>4,806 mAh</p></td><td  ><p>12:31</p></td><td  ><p>29%</p></td><td  ><p>56%</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>6,000 mAh</p></td><td  ><p>14:44</p></td><td  ><p>42%</p></td><td  ><p>75%</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong>   </p></td><td  ><p>5,000 mAh</p></td><td  ><p>14:33</p></td><td  ><p>49%</p></td><td  ><p>76%</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro Fold</strong></p></td><td  ><p>5,015 mAh</p></td><td  ><p>12:16</p></td><td  ><p>28%</p></td><td  ><p>58%</p></td></tr></tbody></table></div><p>Similarly, there are no major improvements with charging, as it retains the same 30W wired and 25W wireless ratings. Plugged into a compatible wired adapter, it reachess 29% in 15 minutes and climbs to 56% after 30 minutes.</p><p>On the upside, I’m glad to see <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-just-tried-the-pixelsnap-qi2-charging-stand-for-the-pixel-10-and-its-a-major-disappointment">PixelSnap</a> support return: it doesn't just enable seamless magnetic charging with Qi2 and <a href="https://www.tomsguide.com/best-picks/best-magsafe-chargers-for-your-iphone-year">MagSafe chargers</a>, but also lets me snap on magnetic accessories like my <a href="https://www.tomsguide.com/phones/i-tried-this-new-magsafe-wallet-that-looks-better-the-longer-i-use-it-heres-what-it-is">Nomad MagSafe Wallet</a>.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-software-and-ai"><span>Google Pixel 11 Pro Fold review: Software and AI</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6480px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uYANtxrUFkaawVdVHvAff8" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold Rambler feature." src="https://cdn.mos.cms.futurecdn.net/uYANtxrUFkaawVdVHvAff8.jpg" mos="" align="middle" fullscreen="" width="6480" height="3645" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Software is where Google typically pulls away from the pack, and the Pixel 11 Pro Fold delivers some genuinely brilliant AI-powered productivity perks.</p><p>One of the most impressive additions is the new Rambler feature in Gboard, which uses Gemini Intelligence to automatically strip out filler words, format messy thoughts into clean sentences, and accept natural voice edits without missing a beat. It has quickly become one of the phone's most underrated features, working so reliably in my daily testing that it has noticeably loosened my reliance on traditional on-screen typing.</p><p>I also appreciate the proactive suggestions that surface contextual shortcuts based on on-screen content. For example, when a text message arrives about setting up a dentist appointment, the system automatically offers a quick action to log it directly into Google Calendar.</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="CUH3djBMAQZ22EDRMXMZNa" name="Pixel 11 Pro Fold review - Gemini Task Automation" alt="Pixel 11 Pro Fold review - Gemini Task Automation." src="https://cdn.mos.cms.futurecdn.net/CUH3djBMAQZ22EDRMXMZNa.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>At the same time, expanded third-party app support for <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-asked-gemini-on-the-galaxy-s26-to-order-dunkin-donuts-for-me-and-24-minutes-later-it-got-delivered-to-my-door">Gemini task automation</a> allows the assistant to handle multi-step actions across more apps than ever. When I asked it to book a dinner reservation at a local restaurant, Gemini researched table availability based on my preferences and prompted me to confirm the final booking. The way it executes complex tasks behind the scenes is not only slick, but a genuine time-saver.</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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qaXxkBXLxYshAFyrtDeTrj" name="Pixel 11 Pro Fold review - AI features" alt="Pixel 11 Pro Fold review - AI features." src="https://cdn.mos.cms.futurecdn.net/qaXxkBXLxYshAFyrtDeTrj.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Multitasking also gains a major boost from the new app bubbles system, letting me dock floating mini-windows in the bottom corner of the unfolded display or overlay a third app on top of an active split-screen view.</p><p>Yet, despite these clever software highlights, the foldable experience still stumbles over familiar quirks. Google still hasn't fully solved app scaling and layout consistency: certain third-party apps remain awkward when switching between portrait and landscape orientations, occasionally refusing to scale smoothly or leaving letterboxed dead space.</p><p>Making matters worse, transitioning from the cover screen to the main 8-inch inner display — and vice versa — can still force apps to refresh their states rather than providing an uninterrupted handoff. It’s a frustrating foundational issue that continues to hold back large-screen Android devices.</p><p>On the longevity front, you still get class-leading support with seven full years of major Android OS and security updates. However, when it comes to Google's top-tier AI features, you only get six months of complimentary Google AI Pro access before a monthly subscription kicks in.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-verdict"><span>Google Pixel 11 Pro Fold review: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5559px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TxmNBXLFaVe6JsbBtnvEa8" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold multitasking" src="https://cdn.mos.cms.futurecdn.net/TxmNBXLFaVe6JsbBtnvEa8.jpg" mos="" align="middle" fullscreen="" width="5559" height="3127" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Honestly, I want to like the Pixel 11 Pro Fold — but not like this. It simply feels too underwhelming, especially after testing standout rivals like the Motorola Razr Fold and Galaxy Z Fold 8 Ultra. While new AI additions like Rambler, expanded Gemini task automation, and Magic Capture are undeniably neat, the hardware fails to deliver the generational leap I expected.</p><p>The Tensor G6 continues to trail rival silicon in raw processing muscle, battery endurance sees only a negligible 15-minute bump, and real-world camera performance does little to move the needle.</p><p>Compounding these modest hardware gains are persistent large-screen software annoyances that still hold the device back. Moving apps between the cover display and the 8-inch main canvas frequently triggers frustrating state refreshes rather than seamless transitions, while orientation switches still suffer from awkward scaling and wasted dead space.</p><p>For a premium foldable commanding a top-tier price tag, the Pixel 11 Pro Fold feels like an iterative update that struggles to truly impress.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review</link>
                                                                            <description>
                            <![CDATA[ Even with key upgrades like the Tensor G6 chip and more AI-assisted features, the Google Pixel 11 Pro Fold comes up short against the competition. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">zbDCgRrwxQWqYgyMs6deVn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/rszQrFESGnfKFDVXR3EF68-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 19 Aug 2026 16:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.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/rszQrFESGnfKFDVXR3EF68-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 Pro Fold review.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 Pro Fold review.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 Pro Fold review.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/rszQrFESGnfKFDVXR3EF68-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Four generations in, Google's foldable phone experiment should be hitting its stride — right? When the original <a href="https://www.tomsguide.com/reviews/google-pixel-fold">Pixel Fold</a> arrived, it was the company’s opportunity to move outside its usual stable of slab phones into something much more exciting. We’re now at the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro Fold</a>, which, more than ever, can’t afford to come up short.</p><p>Google no longer has the luxury of being graded on a curve. Having tested the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> over the last six months alone, I know this space is a fiercely contested battleground, with rival devices like the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a>, and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a> vying for consumer attention.</p><p>While class-leading hardware has never been the line’s biggest strength, Google has taken a different approach by doubling down on its outstanding AI features. In my Google Pixel 11 Pro Fold review, you’ll see if it has the hardware, software, and performance to come out on top. But make no mistake: it needs to be firing on all cylinders, because even the smartest software can't stop the Pixel 11 Pro Fold from slipping behind the pace.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-specifications"><span>Google Pixel 11 Pro Fold review: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>6.5-inch OLED (1,080 x 2,342)</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong></p></td><td  ><p>8-inch OLED (2,076 x 2,152)</p></td></tr><tr><td class="firstcol " ><p><strong>Chip</strong></p></td><td  ><p>Google Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP wide, 10.5MP ultrawide with Macro Focus, 10.8MP 5x telephoto (up to 30x Super Zoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie cameras</strong></p></td><td  ><p>10MP (inner), 10MP (cover)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,806 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Wired/Wireless Charging</strong></p></td><td  ><p>30W, 25W</p></td></tr><tr><td class="firstcol " ><p><strong>Size open</strong></p></td><td  ><p>155.2 × 150.4 × 5.0 mm (6.1 × 5.9 × 0.2 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Size closed</strong></p></td><td  ><p>155.2 × 76.0 × 10.1 mm (6.1 × 3.0 × 0.4 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>239 grams (8.4 ounces)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Obsidian, Olive</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-price-and-release"><span>Google Pixel 11 Pro Fold review: Price and release</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4708px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xsfMKvL7nZzF9gFXgA5yw7" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold held in the hand.." src="https://cdn.mos.cms.futurecdn.net/xsfMKvL7nZzF9gFXgA5yw7.jpg" mos="" align="middle" fullscreen="" width="4708" height="2648" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The Google Pixel 11 Pro Fold officially arrives on August 20, but it costs $100 more than last year’s model — pushing the starting price to a steep $1,899 for the base 256GB version.</p><p>While no one likes seeing a price hike, it still manages to undercut key rivals like the Motorola Razr Fold and Galaxy Z Fold 8 Ultra. Considering this is the first time Google's foldable line has seen a price bump, and that it still rings in cheaper than other book-style flagships, the markup isn't an outright dealbreaker.</p><p>Just like previous generations, color choices remain minimalist: Obsidian and Olive.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORMRJW"></div>                            </div>                            <script src="https://kwizly.com/embed/ORMRJW.js" async></script><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-design"><span>Google Pixel 11 Pro Fold review: Design</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5788px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jFhHFAdoKPWNdJ7X9Y6pi8" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold showing main display." src="https://cdn.mos.cms.futurecdn.net/jFhHFAdoKPWNdJ7X9Y6pi8.jpg" mos="" align="middle" fullscreen="" width="5788" height="3256" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>At first glance, the Pixel 11 Pro Fold doesn't look all that different, sticking closely to the design language Google established over the past couple of generations. But where it truly pulls ahead is durability. By retaining its rare IP68 rating, it offers superior dust-tight protection alongside submersion resistance — so yeah, it’s ready for beach outings, unlike the IP48-rated Galaxy Z Fold 8 Ultra.</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:4745px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="c5rjuNGUjRfGnbiKHbRYx7" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold opened up." src="https://cdn.mos.cms.futurecdn.net/c5rjuNGUjRfGnbiKHbRYx7.jpg" mos="" align="middle" fullscreen="" width="4745" height="2669" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Yet despite that durability win, the design still lacks the high-end refinement found on its closest rivals. It remains noticeably thicker in hand than Samsung's ultra-sleek powerhouse, the bezels framing both displays are wider, and the inner screen still exhibits a deeper crease.</p><p>Google nails the ruggedness, but on pure ergonomics and fit-and-finish, it still feels a step behind the curve.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-display"><span>Google Pixel 11 Pro Fold review: Display</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4386px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HHuzCrwnvoE5LXf7crCnx7" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold playing video." src="https://cdn.mos.cms.futurecdn.net/HHuzCrwnvoE5LXf7crCnx7.jpg" mos="" align="middle" fullscreen="" width="4386" height="2467" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Setting a new record, the Pixel 11 Pro Fold features the brightest screen of any foldable phone that has passed through the <a href="https://www.tomsguide.com/reference/how-toms-guide-tests-and-reviews-smartphones">Tom’s Guide labs</a> — reaching a blinding peak brightness of 2,982 nits on its main 8-inch Super Actua Flex display.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Peak Brightness</strong><br><strong>(Nits)</strong></p></td><td  ><p><strong>Color</strong><br><strong>(DCI-P3)</strong></p></td><td  ><p><strong>Accuracy</strong><br><strong>(Delta-E)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>2,982</p></td><td  ><p>82.1% / 72.2% (Adaptive / Natural)</p></td><td  ><p>0.31 / 0.26<br>(Adaptive / Natural)</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>2,687</p></td><td  ><p>95.3% / 82.6% (Vivid / Natural)</p></td><td  ><p>0.27 / 0.2 (Vivid / Natural)</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>2,192</p></td><td  ><p>88.5% / 159.6% (Natural / Vivid)</p></td><td  ><p>0.20 / 0.35 (Natural / Vivid)</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro Fold</strong></p></td><td  ><p>2,566</p></td><td  ><p>74% / 86.5% (Natural / Adaptive)</p></td><td  ><p>0.25 / 0.34 (Natural / Adaptive)</p></td></tr></tbody></table></div><p>Whether I’m scrolling through reels or working across two apps simultaneously, the main screen doesn’t disappoint, delivering crisp detail, vibrant colors, and outstanding outdoor visibility. Its 6.5-inch outer cover screen is equally impressive.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/pAjGRnJpnro4uAahWNUHd8.jpg" alt="Google Pixel 11 Pro Fold review." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/raXtE5rouXtuWrwaFif8d8.jpg" alt="Google Pixel 11 Pro Fold review." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RfRYezSPXFX4nSpQs35xC8.jpg" alt="Google Pixel 11 Pro Fold review." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>The only thing that continues to irk me is how underutilized that outer display remains when the phone is propped up in tabletop or tent mode. While rivals have embraced dedicated desk-clock and smart display standby experiences — like what I get on the Motorola Razr Fold — the Pixel 11 Pro Fold fails to offer a proper StandBy mode on its cover screen. The closest it gets is the basic ambient screen that kicks in when placed on a wireless charging dock.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-cameras"><span>Google Pixel 11 Pro Fold review: Cameras</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4612px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="2KaDnKYHnT8qLpRUUQ5kh7" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold taking a photo." src="https://cdn.mos.cms.futurecdn.net/2KaDnKYHnT8qLpRUUQ5kh7.jpg" mos="" align="middle" fullscreen="" width="4612" height="2594" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>On paper, the camera setup on the Pixel 11 Pro Fold looks almost identical to last year's model. You get a triple rear system consisting of a 48MP main camera, 10.5MP ultrawide, and 10.8MP telephoto with 5x optical zoom. That telephoto lens continues to be a major standout, offering the longest native optical reach on any book-style foldable. Both the cover display and the inner screen house identical 10MP selfie cameras.</p><p>Despite the familiar spec sheet, Google has swapped in a new primary sensor that reportedly captures more light for improved low-light and Night Sight performance, while the revamped telephoto setup now extends digital reach up to 30x Super Res Zoom.</p><p>Over on the software side, I’m ecstatic about the updates that make the camera app far more robust. For instance, new Camera Looks apply professional-grade film styles for a distinct aesthetic, while handy quick controls give instant access to manual parameters like exposure, focus, and ISO.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/zvSFpGodiusTVHvuSx5rTU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ZcZKR3reeAZf7BtdosaPEF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dBCcfaR6KyWtukT7vQsWTU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/p3fzSKLuAULQSUGzbUkEBF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/D3SRNmbU8RB8Qz2xu3wRhT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/aDkd7obUG4GeUxQzsrP7DF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ScJZ9p4Ne9nA9qwYJbmAuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sZxewSqtENfmsbjCfN52EF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KsQDSzFgd778NvAW2TTxuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/teshgy3PHFkduTKKHxxFFF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QjdHuZcsHUmmuX6WWyUzLT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ezJbDdhavLv4uqGY78nUCF.jpg" alt="Google Pixel 10 Pro Fold camera sample." /><figcaption>Google Pixel 10 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Unfortunately, my low-light snapshots contradict Google’s claims. Just browse through the gallery above to see what I mean — quite frankly, the differences between the Pixel 11 Pro Fold and Pixel 10 Pro Fold are minimal. Across exposure, fine detail, and clarity, the Pixel 11 Pro Fold simply doesn't offer any dramatic gains.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/XisHF4r9UcA6xo6mxvqvRT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/PSUaFL7GuWEKSUK4ccHTh.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Samsung Galaxy Z Fold 8 Ultra.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/azg8C6Kwgx4sQgKrcmave7.jpg" alt="Motorola Razr Fold camera sample." /><figcaption>Motorola Razr Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Despite boasting the longest native optical reach, the Pixel 11 Pro Fold proves that hardware specs alone can’t guarantee the sharpest telephoto results. Even though the Pixel's 30x snapshot manages to edge out the Galaxy Z Fold 8 Ultra, the Razr Fold’s superior computational photography and AI enhancements deliver class-leading clarity, rendering the roof shingles and foreground brush with noticeably finer definition.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/eMmm53bfgmDEtzFSYozQXT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/aZdupmmy6Wby3pQFYivZq.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Samsung Galaxy Z Fold 8 Ultra.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/pZtYxdBLrHDhoW7fmx6mk7.jpg" alt="Motorola Razr Fold camera sample." /><figcaption>Motorola Razr Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Here’s another example of how the Pixel 11 Pro Fold stacks up against its rivals at 30x zoom. This time, I pointed them at a distant sign to see how effectively each phone cleans up the shot.</p><p>Once again, the Razr Fold surprised me by leveraging superior AI upscaling to carve out sharp text edges and rich wood-grain definition. Still, Google's 30x Super Res Zoom easily outperforms the Galaxy Z Fold 8 Ultra, which falters with aggressive digital noise and muddier textures across the fence.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/j9hQ93kBE6EKfmnvscRExU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ucrhdyfHuB5kYjuJZ5Ghs.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Samsung Galaxy Z Fold 8 Ultra.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/uQNtrg7UZ4kJC3Gz6GKFn7.jpg" alt="Motorola Razr Fold camera sample." /><figcaption>Motorola Razr Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>For pure color accuracy and balanced exposure, the Pixel 11 Pro Fold comfortably captures the most authentic snapshot of the floral arrangement above. It delivers remarkably true-to-life color temperature and natural saturation, allowing the yellow sunflowers and deep pink carnations to pop without blowing out subtle highlight details on the petals.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/TUUFjjbUkTi37uBx6izAuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption>Google Pixel 11 Pro Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6Ya5bxFwkzcKW4DgNPLzp.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Samsung Galaxy Z Fold 8 Ultra.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WJ9K42R7mPvY3EohXTTdh7.jpg" alt="Motorola Razr Fold camera sample." /><figcaption>Motorola Razr Fold.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>When it comes to framing quick portraits, I recommend sticking to the cover screen camera, as it produces noticeably better results than the inner shooter. Under tricky indoor restaurant lighting, the Pixel 11 Pro Fold's 10MP outer selfie camera captures the most lifelike skin tones, authentic facial texture, and natural contrast of the bunch. While the Razr Fold tends to overexpose and soften fine facial features, and the Galaxy Z Fold 8 Ultra leans noticeably warm, Google's color tuning and computational processing make for clean, well-balanced shots every time.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/D6oRZAzXR9bUF9ZDjMzjzU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/REJqY5LhiRZbbLZ3S6fRJT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GQecG5pGp5BCfw6mRoWKzU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6bvyikrrzqvE7gZ7DWddxU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/j9hQ93kBE6EKfmnvscRExU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RhXZgiBHuu3EmaXyNCS4xU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dw77WQpHwjLAdHjbpHD5wU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6tZEDXCn8KTvQhVtMbWevU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KsQDSzFgd778NvAW2TTxuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Sur7aQ8wEbYmkUxvzT5yuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ScJZ9p4Ne9nA9qwYJbmAuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/TUUFjjbUkTi37uBx6izAuU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KFzrBcZ588u8WFhLTDh4uU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JyiChSL4mt9SFHnyAZjjtU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/njwaJQA5wheqQoXvPyLUtU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/v9wbgtPLHjw6WhbYJdETsU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/b88GaKNYQMEpVpNsRHy2eU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zvSFpGodiusTVHvuSx5rTU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dBCcfaR6KyWtukT7vQsWTU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/rMXRiHt26tC5kRzSkYmpKU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/heVrDQnmWi7nBS9q2tss4U.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RPLEkwbs7cqsR9muFH8s2U.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/qXaXy27u4TJeYEVsmjMioT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/mWzJUr6cEcLv9UfhH4BhnT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/D3SRNmbU8RB8Qz2xu3wRhT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/eMmm53bfgmDEtzFSYozQXT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XisHF4r9UcA6xo6mxvqvRT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QjdHuZcsHUmmuX6WWyUzLT.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:640px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="ffnQHSp4AyfDebwpUvn5ij" name="Pixel 11 Pro Fold review - AI features" alt="Pixel 11 Pro Fold review - AI features." src="https://cdn.mos.cms.futurecdn.net/ffnQHSp4AyfDebwpUvn5ij.gif" mos="" align="middle" fullscreen="" width="640" height="480" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Another standout addition to the camera experience is Magic Capture, which takes the stress out of trying to nail the perfect action shot in real time. Instead of forcing you to choose between shooting a video or firing off a burst of photos, Magic Capture continuously records short clips while the phone analyzes every frame behind the scenes.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/53u5eM99eF9i5smMzzjDtU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/BLc2m3CMg83E7hravDGWbU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/boFiAbm2rixxXpYSqg8XbU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xbr2ej5L7BUtTVRkuRadnU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/FdgexU6o9iYR3fWtPkfgnU.jpg" alt="Google Pixel 11 Pro Fold camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>It automatically detects peak moments — spotting genuine smiles, sharp motion freeze, and open eyes — to extract high-resolution stills straight from the footage. Even when I had someone else record my shameless inspection of the apple section at Trader Joe’s, Magic Capture worked exactly as intended, consistently plucking sharp, print-worthy stills from the video without any extra effort on my part.</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:4795px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZUiy4Wz9d7BSLUsQc7bSH8" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold creator mode." src="https://cdn.mos.cms.futurecdn.net/ZUiy4Wz9d7BSLUsQc7bSH8.jpg" mos="" align="middle" fullscreen="" width="4795" height="2697" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Content creators and solo vloggers will adore the new Creator Mode, which transforms the foldable into a self-contained production studio. The standout perk is the built-in teleprompter tool, which scrolls through my script smoothly across the display at customizable speeds and text sizes, keeping my eye line locked directly onto the lens.</p><p>Best of all, Google took full advantage of the dual-screen form factor because Creator Mode seamlessly supports the cover screen paired with the flagship rear cameras. It completely eliminates the need for a dedicated camera operator or a secondary monitor, making solo video production faster, sharper, and far more intuitive.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-performance"><span>Google Pixel 11 Pro Fold review: Performance</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5224px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="BbYPuc5DbUMVk7XfQBZCt7" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold review." src="https://cdn.mos.cms.futurecdn.net/BbYPuc5DbUMVk7XfQBZCt7.jpg" mos="" align="middle" fullscreen="" width="5224" height="2938" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Benchmark tests reveal that Google’s latest chipset, the Tensor G6, continues to trail behind key rivals powered by Apple’s A19 Pro and Qualcomm’s Snapdragon 8 Elite Gen 5. While I don’t place a lot of emphasis on synthetic benchmarks — since they don’t always translate directly to real-world performance — they remain ideal for comparing objective processing performance.</p><p>In Geekbench 6, the Pixel 11 Pro Fold delivers a single-core score of 2,687 and a multicore result of 7,381. While those marks represent a modest bump over the Pixel 10 Pro Fold, they're far from the chart-topping numbers posted by competing flagships. Thankfully, real-world operation tells a smoother story: day-to-day use exhibits snappy app launches, fluid split-screen multitasking, and effortless navigation across the UI.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Chipset</strong></p></td><td  ><p><strong>Geekbench 6 (single / multi-core)</strong></p></td><td  ><p><strong>3DMark Wild Life Unlimited (fps)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>2,687 / 7,381</p></td><td  ><p>87.56</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>Snapdragon 8 Gen 5</p></td><td  ><p>2,711 / 9,134</p></td><td  ><p>129.23</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong>   </p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td><td  ><p>3,733 / 11,457</p></td><td  ><p>123.83</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro Fold</strong></p></td><td  ><p>Tensor G5</p></td><td  ><p>2,334 / 6,332  </p></td><td  ><p>79.68</p></td></tr></tbody></table></div><p>Graphics processing sees a marginal boost as well, with 3DMark’s Wild Life Unlimited benchmark yielding an overall score of 14,623 and an average frame rate of 87.56 fps. I loaded up my go-to test titles, including Age of Origins and Diablo Immortal, and both ran smoothly on the massive 8-inch canvas without any major hiccups or stutter.</p><p>While Tensor silicon has historically prioritized on-device AI efficiency and computational smarts over raw benchmark supremacy, I still would have liked to see Google close the gap with its direct competitors at this price point.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-battery-and-charging"><span>Google Pixel 11 Pro Fold review: Battery and charging</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3962px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Xon7bPhGo25KswkshzRVw6" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold thinness." src="https://cdn.mos.cms.futurecdn.net/Xon7bPhGo25KswkshzRVw6.jpg" mos="" align="middle" fullscreen="" width="3962" height="2229" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>In our custom battery drain test, the Pixel 11 Pro Fold clocks an average time of 12 hours and 31 minutes — a modest 15-minute bump over the Pixel 10 Pro Fold. That’s one of the slimmest year-over-year gains I’ve seen in a while, doing little to bolster its overall value proposition. Still, while it doesn't dethrone the longest-lasting foldables on the market, 12.5 hours is more than enough to get me through a full day of typical use.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery size (mAh)</strong></p></td><td  ><p><strong>Battery life (hrs:mins)</strong></p></td><td  ><p><strong>Charging % in 15 minutes</strong></p></td><td  ><p><strong>Charging % in 30 minutes</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>4,806 mAh</p></td><td  ><p>12:31</p></td><td  ><p>29%</p></td><td  ><p>56%</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>6,000 mAh</p></td><td  ><p>14:44</p></td><td  ><p>42%</p></td><td  ><p>75%</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong>   </p></td><td  ><p>5,000 mAh</p></td><td  ><p>14:33</p></td><td  ><p>49%</p></td><td  ><p>76%</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro Fold</strong></p></td><td  ><p>5,015 mAh</p></td><td  ><p>12:16</p></td><td  ><p>28%</p></td><td  ><p>58%</p></td></tr></tbody></table></div><p>Similarly, there are no major improvements with charging, as it retains the same 30W wired and 25W wireless ratings. Plugged into a compatible wired adapter, it reachess 29% in 15 minutes and climbs to 56% after 30 minutes.</p><p>On the upside, I’m glad to see <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-just-tried-the-pixelsnap-qi2-charging-stand-for-the-pixel-10-and-its-a-major-disappointment">PixelSnap</a> support return: it doesn't just enable seamless magnetic charging with Qi2 and <a href="https://www.tomsguide.com/best-picks/best-magsafe-chargers-for-your-iphone-year">MagSafe chargers</a>, but also lets me snap on magnetic accessories like my <a href="https://www.tomsguide.com/phones/i-tried-this-new-magsafe-wallet-that-looks-better-the-longer-i-use-it-heres-what-it-is">Nomad MagSafe Wallet</a>.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-software-and-ai"><span>Google Pixel 11 Pro Fold review: Software and AI</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6480px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uYANtxrUFkaawVdVHvAff8" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold Rambler feature." src="https://cdn.mos.cms.futurecdn.net/uYANtxrUFkaawVdVHvAff8.jpg" mos="" align="middle" fullscreen="" width="6480" height="3645" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Software is where Google typically pulls away from the pack, and the Pixel 11 Pro Fold delivers some genuinely brilliant AI-powered productivity perks.</p><p>One of the most impressive additions is the new Rambler feature in Gboard, which uses Gemini Intelligence to automatically strip out filler words, format messy thoughts into clean sentences, and accept natural voice edits without missing a beat. It has quickly become one of the phone's most underrated features, working so reliably in my daily testing that it has noticeably loosened my reliance on traditional on-screen typing.</p><p>I also appreciate the proactive suggestions that surface contextual shortcuts based on on-screen content. For example, when a text message arrives about setting up a dentist appointment, the system automatically offers a quick action to log it directly into Google Calendar.</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="CUH3djBMAQZ22EDRMXMZNa" name="Pixel 11 Pro Fold review - Gemini Task Automation" alt="Pixel 11 Pro Fold review - Gemini Task Automation." src="https://cdn.mos.cms.futurecdn.net/CUH3djBMAQZ22EDRMXMZNa.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>At the same time, expanded third-party app support for <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-asked-gemini-on-the-galaxy-s26-to-order-dunkin-donuts-for-me-and-24-minutes-later-it-got-delivered-to-my-door">Gemini task automation</a> allows the assistant to handle multi-step actions across more apps than ever. When I asked it to book a dinner reservation at a local restaurant, Gemini researched table availability based on my preferences and prompted me to confirm the final booking. The way it executes complex tasks behind the scenes is not only slick, but a genuine time-saver.</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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qaXxkBXLxYshAFyrtDeTrj" name="Pixel 11 Pro Fold review - AI features" alt="Pixel 11 Pro Fold review - AI features." src="https://cdn.mos.cms.futurecdn.net/qaXxkBXLxYshAFyrtDeTrj.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Multitasking also gains a major boost from the new app bubbles system, letting me dock floating mini-windows in the bottom corner of the unfolded display or overlay a third app on top of an active split-screen view.</p><p>Yet, despite these clever software highlights, the foldable experience still stumbles over familiar quirks. Google still hasn't fully solved app scaling and layout consistency: certain third-party apps remain awkward when switching between portrait and landscape orientations, occasionally refusing to scale smoothly or leaving letterboxed dead space.</p><p>Making matters worse, transitioning from the cover screen to the main 8-inch inner display — and vice versa — can still force apps to refresh their states rather than providing an uninterrupted handoff. It’s a frustrating foundational issue that continues to hold back large-screen Android devices.</p><p>On the longevity front, you still get class-leading support with seven full years of major Android OS and security updates. However, when it comes to Google's top-tier AI features, you only get six months of complimentary Google AI Pro access before a monthly subscription kicks in.</p><h2 class="article-body__section" id="section-google-pixel-11-pro-fold-review-verdict"><span>Google Pixel 11 Pro Fold review: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5559px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TxmNBXLFaVe6JsbBtnvEa8" name="Google Pixel 11 Pro Fold review" alt="Google Pixel 11 Pro Fold multitasking" src="https://cdn.mos.cms.futurecdn.net/TxmNBXLFaVe6JsbBtnvEa8.jpg" mos="" align="middle" fullscreen="" width="5559" height="3127" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Honestly, I want to like the Pixel 11 Pro Fold — but not like this. It simply feels too underwhelming, especially after testing standout rivals like the Motorola Razr Fold and Galaxy Z Fold 8 Ultra. While new AI additions like Rambler, expanded Gemini task automation, and Magic Capture are undeniably neat, the hardware fails to deliver the generational leap I expected.</p><p>The Tensor G6 continues to trail rival silicon in raw processing muscle, battery endurance sees only a negligible 15-minute bump, and real-world camera performance does little to move the needle.</p><p>Compounding these modest hardware gains are persistent large-screen software annoyances that still hold the device back. Moving apps between the cover display and the 8-inch main canvas frequently triggers frustrating state refreshes rather than seamless transitions, while orientation switches still suffer from awkward scaling and wasted dead space.</p><p>For a premium foldable commanding a top-tier price tag, the Pixel 11 Pro Fold feels like an iterative update that struggles to truly impress.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Protect your Pixel 11 Pro and Pro XL in style with these 15 essential cases and accessories ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you're planning on picking up one of the new Pixel 11 Pro or Pixel 11 Pro XL smartphones then, take our advice, and make sure that you get a case for it as soon as possible! These are expensive products, after all, and you don't want to damage your new toy the first time you accidentally drop or bash it.</p><p>In this article I've put together a selection of my 12 favorite cases for the Pro and the Pro XL – six for each device. I've included Google's own official cases, as well as a selection of great designs from third party brands. I've also picked out a few essential Google accessories that will work with the new phone.</p><p>If you haven't yet chosen which Pixel 11 smartphone you're going to get yet and are looking at the rest of the range, I've also put together similar pieces for the standard  <a href="https://www.tomsguide.com/phones/google-pixel-phones/upgrade-your-new-pixel-11-with-these-15-must-have-cases-and-add-ons">Pixel 11</a> and the <a href="https://www.tomsguide.com/phones/google-pixel-phones/level-up-your-new-pixel-11-pro-fold-with-these-15-essential-cases-and-accessories">Pixel 11 Pro Fold</a>, too.</p><h2 id="google-pixel-11-pro-cases">Google Pixel 11 Pro cases</h2>        <div class="featured_product_block featured_block_hero" data-id="b3e39d00-97f9-11f1-94ba-55ea39b933de">            <a href="https://store.google.com/us/product/pixel_11_pro_phone_case/" data-model-name="Google Pixelsnap Case for Pixel 11 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/dQhagPywagJt238cS68FSX.jpg" alt="Google, Google Pixelsnap Case for Pixel 11 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Case for Pixel 11 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="469e96c6-97c9-11f1-8c5f-d70c97f8d381">            <a href="https://www.mous.co/products/super-thin-magsafe-compatible-phone-case-black?userRedirect=US&variant=41587143213114" data-model-name="Mous Super Thin Phone Case (Black)" 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/G4FzPDTtXK8DAPPbLA3cid.jpg" alt="Mous Super Thin Phone Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous Super Thin Phone Case (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b3e39ddc-97f9-11f1-9117-6d7d7420fa9e">            <a href="https://www.amazon.com/TORRAS-Google-Pixel-Magnetic-Stand/dp/B0H2ZCWQPN/" data-model-name="Torras Q3 Spin for Google Pixel 11 Pro" 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/Txh7cC22BpEw7mQ3zz4zhS.jpg" alt="Torras Q3 Spin for Google Pixel 11 Pro Case With 360 Magnetic Stand Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>TORRAS</div>                                        <div class="featured__title">Torras Q3 Spin for Google Pixel 11 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b3e39c2e-97f9-11f1-91a8-2df8be44014e">            <a href="https://www.mous.co/products/super-thin-phone-case-moss?variant=64212576076153" data-model-name="Mous Super Thin Phone Case (Moss)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/36Zyng9d48KRMwjC2WqwYB.jpg" alt="Mous Super Thin Phone Case (Moss)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Moss</div>                                        <div class="featured__title">Mous Super Thin Phone Case (Moss)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b3e39d6e-97f9-11f1-871e-3d14dcb92982">            <a href="https://torro.co.uk/products/google-pixel-11-pro-leather-wallet-case" data-model-name="Google Pixel 11 Pro Leather Wallet Case" 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/EBp2UUfHJqu4YTvbCCb4pS.jpg" alt="Google Pixel 11 Pro Leather Wallet Case - Black With Red Detail"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>TORRO</div>                                        <div class="featured__title">Google Pixel 11 Pro Leather Wallet Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b3e39c9c-97f9-11f1-8fd1-e3193406bb34">            <a href="https://www.mous.co/products/protective-clear-phone-case-magnetic-clarity?variant=41587143573562" data-model-name="Mous Clarity Phone Case for Pixel 11 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/beKs5nmULJMDvMafS6hJ67.jpg" alt="Mous, Mous Clarity Phone Case for Pixel 11 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous Clarity Phone Case for Pixel 11 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="google-pixel-11-pro-xl-cases">Google Pixel 11 Pro XL cases</h2>        <div class="featured_product_block featured_block_hero" data-id="469e9572-97c9-11f1-b2f3-4b68832bbc08">            <a href="https://www.amazon.com/dp/B0H6VVMXS9/" data-model-name="Google Pixelsnap Pixel 11 Pro XL Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/vapj4QU9TfWixH2KPuetqM.jpg" alt="Google Pixelsnap Case Pixel 11 Pro XL"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Pixel 11 Pro XL Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="469e95ea-97c9-11f1-968a-3129fbe2ea52">            <a href="https://www.amazon.com/SPIDERCASE-Magnetic-Google-Pixel-Black/dp/B0H4QSYLXX/" data-model-name="Spidercase Magnetic Case for Google Pixel 11 Pro XL" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZChARr3WLUDrz945ejbxK5.jpg" alt="Spidercase Magnetic Case for Google Pixel 11 Pro XL"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SPIDERCASE</div>                                        <div class="featured__title">Spidercase Magnetic Case for Google Pixel 11 Pro XL</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="469e97ac-97c9-11f1-8574-f9b64d29f78c">            <a href="https://www.amazon.com/FNTCASE-11-Pro-XL-Case/dp/B0H3PG2MYJ/" data-model-name="Fntcase for Google Pixel 11 Pro XL Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/oefQxKDZxGHa7zjCfyHENU.jpg" alt="Fntcase for Google Pixel 11 Pro XL"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>FNTCASE</div>                                        <div class="featured__title">Fntcase for Google Pixel 11 Pro XL Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="73c0b8c4-97fa-11f1-80d0-59e71f5e4215">            <a href="https://www.quadlockcase.com/collections/pixel-11-pro-xl/products/case-all-pixel-devices?device=Pixel+11+Pro+XL" data-model-name="Quad Lock Pixel 11 Pro XL Magcase" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/4k8usMmkzjuPPQgw2EiSAN.jpg" alt="Pixel, Cases - Pixel"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Quad Lock</div>                                        <div class="featured__title">Quad Lock Pixel 11 Pro XL Magcase</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="469e9658-97c9-11f1-bbfb-a358e3b8616c">            <a href="https://thinborne.com/products/pixel-11-pro-xl-case" data-model-name="ThinBorne Pixel 11 Pro XL Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZtpAk3gjTYuhDdX8MvLZqA.jpg" alt="ThinBorne, Pixel 11 Pro Xl Case - Unbelievably Thin | Aramid Fiber | Magnetic - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ThinBorne</div>                                        <div class="featured__title">ThinBorne Pixel 11 Pro XL Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="469e9734-97c9-11f1-ac3b-5350d239eb2a">            <a href="https://www.rokform.com/products/google-pixel-11-pro-xl-rugged-case-black?pb=0" data-model-name="Rokform Pixel 11 Pro Xl Rugged Case" 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/vEw5mgM7ogd7AwixHN7fqm.jpg" alt="Google Pixel 11 Pro Xl Rugged Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Rokform</div>                                        <div class="featured__title">Rokform Pixel 11 Pro Xl Rugged Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="google-pixel-11-accessories">Google Pixel 11 accessories</h2>        <div class="featured_product_block featured_block_hero" data-id="73c0bbd0-97fa-11f1-a5c4-0b2d1b433465">            <a href="https://store.google.com/us/product/pixelsnap_ring_stand?hl=en-US&selections=eyJwcm9kdWN0RmFtaWx5IjoiWkdWMmFXTmxYMlpoYldsc2VWOWZjR2w0Wld4emJtRndYM0pwYm1kZmMzUmhibVJmWm1GdCJ9" data-model-name="Google Pixelsnap Ring Stand" 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/UG43rmFfHcvcmidWs4k99d.jpg" alt="Google Pixelsnap Ring Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Ring Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="73c0bc3e-97fa-11f1-9304-97932d72fc4a">            <a href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QCMF5/" data-model-name="Google Pixel Buds Pro 2 (Peony)" 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/DQXhcSNtHwc9K64DZqnM5G.jpg" alt="Google Pixel Buds Pro 2 - Wireless Bluetooth Earbuds - Peony"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Buds Pro 2 (Peony)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="73c0bb6c-97fa-11f1-b38e-d7e8e71859fc">            <a href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0H7X25DRT/" data-model-name="Google Pixel Watch 5 (Obsidian)" 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/uN3Y9pAfUtXzFMcmippW9F.jpg" alt="Google Pixel Watch 5 (41mm) - Android Smartwatch - Obsidian - Wi-Fi"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Watch 5 (Obsidian)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/protect-your-pixel-11-pro-and-pro-xl-in-style-with-these-15-essential-cases-and-accessories</link>
                                                                            <description>
                            <![CDATA[ Protect your new Pixel 11 Pro or Pro XL smartphone with one of these tough and stylish cases. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">J4ZpaitjayngshxrD5ZGaE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/PbYFFXDCNnStC4SfrpJeXZ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 17 Aug 2026 17:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Will Salmon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/HpRWP7Mh9ErgRGoTvZBbBJ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Will Salmon is Tom&#039;s Guide&#039;s Collections Editor, curating advice on the best products to spend your money on. Will has been writing about tech and entertainment for almost 20 years, including stints as GamesRadar+&#039;s Streaming Editor, editing comics website Newsarama, and writing for lots and lots of magazines.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/PbYFFXDCNnStC4SfrpJeXZ-1280-80.jpg">
                                                            <media:credit><![CDATA[Google, Mous / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of Pixel 11 Pro and Pro XL cases.]]></media:description>                                                            <media:text><![CDATA[A selection of Pixel 11 Pro and Pro XL cases.]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of Pixel 11 Pro and Pro XL cases.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/PbYFFXDCNnStC4SfrpJeXZ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you're planning on picking up one of the new Pixel 11 Pro or Pixel 11 Pro XL smartphones then, take our advice, and make sure that you get a case for it as soon as possible! These are expensive products, after all, and you don't want to damage your new toy the first time you accidentally drop or bash it.</p><p>In this article I've put together a selection of my 12 favorite cases for the Pro and the Pro XL – six for each device. I've included Google's own official cases, as well as a selection of great designs from third party brands. I've also picked out a few essential Google accessories that will work with the new phone.</p><p>If you haven't yet chosen which Pixel 11 smartphone you're going to get yet and are looking at the rest of the range, I've also put together similar pieces for the standard  <a href="https://www.tomsguide.com/phones/google-pixel-phones/upgrade-your-new-pixel-11-with-these-15-must-have-cases-and-add-ons">Pixel 11</a> and the <a href="https://www.tomsguide.com/phones/google-pixel-phones/level-up-your-new-pixel-11-pro-fold-with-these-15-essential-cases-and-accessories">Pixel 11 Pro Fold</a>, too.</p><h2 id="google-pixel-11-pro-cases">Google Pixel 11 Pro cases</h2>        <div class="featured_product_block featured_block_hero" data-id="b3e39d00-97f9-11f1-94ba-55ea39b933de">            <a href="https://store.google.com/us/product/pixel_11_pro_phone_case/" data-model-name="Google Pixelsnap Case for Pixel 11 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/dQhagPywagJt238cS68FSX.jpg" alt="Google, Google Pixelsnap Case for Pixel 11 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Case for Pixel 11 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="469e96c6-97c9-11f1-8c5f-d70c97f8d381">            <a href="https://www.mous.co/products/super-thin-magsafe-compatible-phone-case-black?userRedirect=US&variant=41587143213114" data-model-name="Mous Super Thin Phone Case (Black)" 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/G4FzPDTtXK8DAPPbLA3cid.jpg" alt="Mous Super Thin Phone Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous Super Thin Phone Case (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b3e39ddc-97f9-11f1-9117-6d7d7420fa9e">            <a href="https://www.amazon.com/TORRAS-Google-Pixel-Magnetic-Stand/dp/B0H2ZCWQPN/" data-model-name="Torras Q3 Spin for Google Pixel 11 Pro" 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/Txh7cC22BpEw7mQ3zz4zhS.jpg" alt="Torras Q3 Spin for Google Pixel 11 Pro Case With 360 Magnetic Stand Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>TORRAS</div>                                        <div class="featured__title">Torras Q3 Spin for Google Pixel 11 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b3e39c2e-97f9-11f1-91a8-2df8be44014e">            <a href="https://www.mous.co/products/super-thin-phone-case-moss?variant=64212576076153" data-model-name="Mous Super Thin Phone Case (Moss)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/36Zyng9d48KRMwjC2WqwYB.jpg" alt="Mous Super Thin Phone Case (Moss)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Moss</div>                                        <div class="featured__title">Mous Super Thin Phone Case (Moss)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b3e39d6e-97f9-11f1-871e-3d14dcb92982">            <a href="https://torro.co.uk/products/google-pixel-11-pro-leather-wallet-case" data-model-name="Google Pixel 11 Pro Leather Wallet Case" 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/EBp2UUfHJqu4YTvbCCb4pS.jpg" alt="Google Pixel 11 Pro Leather Wallet Case - Black With Red Detail"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>TORRO</div>                                        <div class="featured__title">Google Pixel 11 Pro Leather Wallet Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b3e39c9c-97f9-11f1-8fd1-e3193406bb34">            <a href="https://www.mous.co/products/protective-clear-phone-case-magnetic-clarity?variant=41587143573562" data-model-name="Mous Clarity Phone Case for Pixel 11 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/beKs5nmULJMDvMafS6hJ67.jpg" alt="Mous, Mous Clarity Phone Case for Pixel 11 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous Clarity Phone Case for Pixel 11 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="google-pixel-11-pro-xl-cases">Google Pixel 11 Pro XL cases</h2>        <div class="featured_product_block featured_block_hero" data-id="469e9572-97c9-11f1-b2f3-4b68832bbc08">            <a href="https://www.amazon.com/dp/B0H6VVMXS9/" data-model-name="Google Pixelsnap Pixel 11 Pro XL Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/vapj4QU9TfWixH2KPuetqM.jpg" alt="Google Pixelsnap Case Pixel 11 Pro XL"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Pixel 11 Pro XL Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="469e95ea-97c9-11f1-968a-3129fbe2ea52">            <a href="https://www.amazon.com/SPIDERCASE-Magnetic-Google-Pixel-Black/dp/B0H4QSYLXX/" data-model-name="Spidercase Magnetic Case for Google Pixel 11 Pro XL" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZChARr3WLUDrz945ejbxK5.jpg" alt="Spidercase Magnetic Case for Google Pixel 11 Pro XL"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SPIDERCASE</div>                                        <div class="featured__title">Spidercase Magnetic Case for Google Pixel 11 Pro XL</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="469e97ac-97c9-11f1-8574-f9b64d29f78c">            <a href="https://www.amazon.com/FNTCASE-11-Pro-XL-Case/dp/B0H3PG2MYJ/" data-model-name="Fntcase for Google Pixel 11 Pro XL Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/oefQxKDZxGHa7zjCfyHENU.jpg" alt="Fntcase for Google Pixel 11 Pro XL"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>FNTCASE</div>                                        <div class="featured__title">Fntcase for Google Pixel 11 Pro XL Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="73c0b8c4-97fa-11f1-80d0-59e71f5e4215">            <a href="https://www.quadlockcase.com/collections/pixel-11-pro-xl/products/case-all-pixel-devices?device=Pixel+11+Pro+XL" data-model-name="Quad Lock Pixel 11 Pro XL Magcase" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/4k8usMmkzjuPPQgw2EiSAN.jpg" alt="Pixel, Cases - Pixel"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Quad Lock</div>                                        <div class="featured__title">Quad Lock Pixel 11 Pro XL Magcase</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="469e9658-97c9-11f1-bbfb-a358e3b8616c">            <a href="https://thinborne.com/products/pixel-11-pro-xl-case" data-model-name="ThinBorne Pixel 11 Pro XL Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZtpAk3gjTYuhDdX8MvLZqA.jpg" alt="ThinBorne, Pixel 11 Pro Xl Case - Unbelievably Thin | Aramid Fiber | Magnetic - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ThinBorne</div>                                        <div class="featured__title">ThinBorne Pixel 11 Pro XL Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="469e9734-97c9-11f1-ac3b-5350d239eb2a">            <a href="https://www.rokform.com/products/google-pixel-11-pro-xl-rugged-case-black?pb=0" data-model-name="Rokform Pixel 11 Pro Xl Rugged Case" 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/vEw5mgM7ogd7AwixHN7fqm.jpg" alt="Google Pixel 11 Pro Xl Rugged Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Rokform</div>                                        <div class="featured__title">Rokform Pixel 11 Pro Xl Rugged Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="google-pixel-11-accessories">Google Pixel 11 accessories</h2>        <div class="featured_product_block featured_block_hero" data-id="73c0bbd0-97fa-11f1-a5c4-0b2d1b433465">            <a href="https://store.google.com/us/product/pixelsnap_ring_stand?hl=en-US&selections=eyJwcm9kdWN0RmFtaWx5IjoiWkdWMmFXTmxYMlpoYldsc2VWOWZjR2w0Wld4emJtRndYM0pwYm1kZmMzUmhibVJmWm1GdCJ9" data-model-name="Google Pixelsnap Ring Stand" 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/UG43rmFfHcvcmidWs4k99d.jpg" alt="Google Pixelsnap Ring Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Ring Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="73c0bc3e-97fa-11f1-9304-97932d72fc4a">            <a href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QCMF5/" data-model-name="Google Pixel Buds Pro 2 (Peony)" 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/DQXhcSNtHwc9K64DZqnM5G.jpg" alt="Google Pixel Buds Pro 2 - Wireless Bluetooth Earbuds - Peony"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Buds Pro 2 (Peony)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="73c0bb6c-97fa-11f1-b38e-d7e8e71859fc">            <a href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0H7X25DRT/" data-model-name="Google Pixel Watch 5 (Obsidian)" 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/uN3Y9pAfUtXzFMcmippW9F.jpg" alt="Google Pixel Watch 5 (41mm) - Android Smartwatch - Obsidian - Wi-Fi"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Watch 5 (Obsidian)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Score any new Pixel 11 phone for free at T-Mobile: here's how to get yours ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The battle for <a href="https://www.tomsguide.com/best-picks/best-phones">best phone</a> of 2026 is heating up. Last week Google unveiled its new Pixel 11 lineup, which consists of the 6.3-inch Pixel 11 ($899), 6.3-inch Pixel 11 Pro ($1,099), 6.8-inch Pixel 11 Pro XL ($1,299), and Pixel 11 Pro Fold ($1,899).</p><p>We're still in the process of testing Google's new lineup, but if you're ready to take the plunge, <a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">T-Mobile is offering the Pixel 11, Pixel 11 Pro, or Pixel 11 Pro XL for free</a> with select data plans and no trade-in required. It's one of the best <a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-found-the-best-google-pixel-11-preorder-deals-save-up-to-usd1-300-on-any-model">Pixel 11 preorder deals</a> you can get. Below I've broken down how each deal works.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>Pixel 11: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free w/ select data plans @ T-Mobile</strong></a><strong></strong></li><li><strong>Pixel 11 Pro: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free w/ select data plans @ T-Mobile</strong></a><strong></strong></li><li><strong>Pixel 11 Pro XL: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free w/ select data plans @ T-Mobile</strong></a><strong></strong></li><li><strong>Pixel Watch 5: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>get $300 off @ T-Mobile </strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-pixel-11-preorders"><span>Pixel 11 preorders</span></h3><div class="product"><a data-dimension112="5031ec08-980d-11f1-9757-f57b65e6cbe7" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1252px;"><p class="vanilla-image-block" style="padding-top:119.81%;"><img id="HU5623EmmcxWKvimncgZqE" name="Pixel 11 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HU5623EmmcxWKvimncgZqE.jpg" mos="" align="middle" fullscreen="" width="1252" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ec08-980d-11f1-9757-f57b65e6cbe7" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile is offering the Pixel 11 for free with trade-in and an Experience Beyond or More plan. Or get up to $500 off with trade-in on most plans. The new phone features a 6.3-inch Actua Display OLED (2424 x 1080) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 48MP (f/1.7) main, 13MP (f/2.2) ultrawide, and 10.8MP (f/3.1) telephoto with 5x optical zoom. On the front there's a 10.5MP (f/2.2) lens. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ec08-980d-11f1-9757-f57b65e6cbe7" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5031ec8a-980d-11f1-a3f6-6d7ca335135c" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1239px;"><p class="vanilla-image-block" style="padding-top:121.07%;"><img id="FrEQh6QFhVjxEGTiUafDmn" name="Pixel 11 Pro deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FrEQh6QFhVjxEGTiUafDmn.jpg" mos="" align="middle" fullscreen="" width="1239" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ec8a-980d-11f1-a3f6-6d7ca335135c" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has the Pixel 11 Pro for free with trade-in on Experience More or Experience Beyond plans. Or get $500 off with trade-in on most plans. It features a 6.3-inch Super Actua OLED display (1280 x 2856) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ec8a-980d-11f1-a3f6-6d7ca335135c" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5031ecf8-980d-11f1-a2a6-b94efde73f9c" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1240px;"><p class="vanilla-image-block" style="padding-top:120.97%;"><img id="K5nrHXfiC8uPkaw7PTsEy7" name="Pixel 11 Pro XL deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/K5nrHXfiC8uPkaw7PTsEy7.jpg" mos="" align="middle" fullscreen="" width="1240" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ecf8-980d-11f1-a2a6-b94efde73f9c" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile is offering the Pixel 11 Pro XL for free on an Experience Beyond plan with trade-in. Or you can get up to $1,100 off with trade-in on an Experience More plan or up to $500 off with trade-in on most plans. It features a 6.8-inch Super Actua OLED display (1344 x 2992) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens.<a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ecf8-980d-11f1-a2a6-b94efde73f9c" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="22c8f076-9813-11f1-a997-95f735e2ff78" data-action="Deal Block" data-label="Pixel Watch 5" data-dimension48="Pixel Watch 5" data-dimension25="$199" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1333px;"><p class="vanilla-image-block" style="padding-top:112.53%;"><img id="tB3HfGmM99a8uHaH4zXnjc" name="Pixel Watch 5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tB3HfGmM99a8uHaH4zXnjc.jpg" mos="" align="middle" fullscreen="" width="1333" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel Watch 5: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="22c8f076-9813-11f1-a997-95f735e2ff78" data-action="Deal Block" data-label="Pixel Watch 5" data-dimension48="Pixel Watch 5" data-dimension25="$199"><strong>for $5/month @ T-Mobile</strong></a><strong></strong><br>The Pixel Watch 5 sports the same design, dimensions, display, and battery life as the Pixel Watch 4. However, it offers improved GPS tracking for outdoor workouts and faster/more efficient processing power. It also supports three unique new wellness tools: Breathing Emergency Detection, Blood Pressure Trends, and Insulin Resistance Trends. In our initial <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tried-the-new-google-pixel-watch-5-and-its-new-health-and-safety-features-blow-the-apple-watch-out-of-the-water">Pixel Watch 5 hands-on</a>, we said its new Blood Pressure trends report and a monthly Insulin Resistance trends report could be revolutionary. Activate a  qualifying Watch Plan Plus 2.0 on T-Mobile and the carrier will take $300 off the watch's full price for a final monthly bill of just $5.55 over the span of 36 months. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="22c8f076-9813-11f1-a997-95f735e2ff78" data-action="Deal Block" data-label="Pixel Watch 5" data-dimension48="Pixel Watch 5" data-dimension25="$199">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&rows=6&view_mode=savings_squad&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=${siteParam}&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (!this.activeDealTag && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 40px; min-height: 40px;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 36px; min-height: 36px;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/score-any-new-pixel-11-phone-for-free-at-t-mobile-heres-how-to-get-yours</link>
                                                                            <description>
                            <![CDATA[ T-Mobile is offering some of the best Google Pixel 11 preorder deals around. Here's how you can score most of Google's new smartphones for free. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oXjSMTNuc59M6yv6Xd3QHG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/py2Lz4D5uGsFyPKJbkaXp4-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 17 Aug 2026 10:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more. He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac. &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&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/py2Lz4D5uGsFyPKJbkaXp4-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Three Pixel 11 phones held in hand]]></media:description>                                                            <media:text><![CDATA[Three Pixel 11 phones held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Three Pixel 11 phones held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/py2Lz4D5uGsFyPKJbkaXp4-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The battle for <a href="https://www.tomsguide.com/best-picks/best-phones">best phone</a> of 2026 is heating up. Last week Google unveiled its new Pixel 11 lineup, which consists of the 6.3-inch Pixel 11 ($899), 6.3-inch Pixel 11 Pro ($1,099), 6.8-inch Pixel 11 Pro XL ($1,299), and Pixel 11 Pro Fold ($1,899).</p><p>We're still in the process of testing Google's new lineup, but if you're ready to take the plunge, <a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">T-Mobile is offering the Pixel 11, Pixel 11 Pro, or Pixel 11 Pro XL for free</a> with select data plans and no trade-in required. It's one of the best <a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-found-the-best-google-pixel-11-preorder-deals-save-up-to-usd1-300-on-any-model">Pixel 11 preorder deals</a> you can get. Below I've broken down how each deal works.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>Pixel 11: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free w/ select data plans @ T-Mobile</strong></a><strong></strong></li><li><strong>Pixel 11 Pro: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free w/ select data plans @ T-Mobile</strong></a><strong></strong></li><li><strong>Pixel 11 Pro XL: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free w/ select data plans @ T-Mobile</strong></a><strong></strong></li><li><strong>Pixel Watch 5: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>get $300 off @ T-Mobile </strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-pixel-11-preorders"><span>Pixel 11 preorders</span></h3><div class="product"><a data-dimension112="5031ec08-980d-11f1-9757-f57b65e6cbe7" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1252px;"><p class="vanilla-image-block" style="padding-top:119.81%;"><img id="HU5623EmmcxWKvimncgZqE" name="Pixel 11 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HU5623EmmcxWKvimncgZqE.jpg" mos="" align="middle" fullscreen="" width="1252" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ec08-980d-11f1-9757-f57b65e6cbe7" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile is offering the Pixel 11 for free with trade-in and an Experience Beyond or More plan. Or get up to $500 off with trade-in on most plans. The new phone features a 6.3-inch Actua Display OLED (2424 x 1080) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 48MP (f/1.7) main, 13MP (f/2.2) ultrawide, and 10.8MP (f/3.1) telephoto with 5x optical zoom. On the front there's a 10.5MP (f/2.2) lens. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ec08-980d-11f1-9757-f57b65e6cbe7" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5031ec8a-980d-11f1-a3f6-6d7ca335135c" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1239px;"><p class="vanilla-image-block" style="padding-top:121.07%;"><img id="FrEQh6QFhVjxEGTiUafDmn" name="Pixel 11 Pro deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FrEQh6QFhVjxEGTiUafDmn.jpg" mos="" align="middle" fullscreen="" width="1239" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ec8a-980d-11f1-a3f6-6d7ca335135c" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has the Pixel 11 Pro for free with trade-in on Experience More or Experience Beyond plans. Or get $500 off with trade-in on most plans. It features a 6.3-inch Super Actua OLED display (1280 x 2856) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ec8a-980d-11f1-a3f6-6d7ca335135c" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5031ecf8-980d-11f1-a2a6-b94efde73f9c" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1240px;"><p class="vanilla-image-block" style="padding-top:120.97%;"><img id="K5nrHXfiC8uPkaw7PTsEy7" name="Pixel 11 Pro XL deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/K5nrHXfiC8uPkaw7PTsEy7.jpg" mos="" align="middle" fullscreen="" width="1240" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ecf8-980d-11f1-a2a6-b94efde73f9c" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile is offering the Pixel 11 Pro XL for free on an Experience Beyond plan with trade-in. Or you can get up to $1,100 off with trade-in on an Experience More plan or up to $500 off with trade-in on most plans. It features a 6.8-inch Super Actua OLED display (1344 x 2992) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens.<a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5031ecf8-980d-11f1-a2a6-b94efde73f9c" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="22c8f076-9813-11f1-a997-95f735e2ff78" data-action="Deal Block" data-label="Pixel Watch 5" data-dimension48="Pixel Watch 5" data-dimension25="$199" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1333px;"><p class="vanilla-image-block" style="padding-top:112.53%;"><img id="tB3HfGmM99a8uHaH4zXnjc" name="Pixel Watch 5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tB3HfGmM99a8uHaH4zXnjc.jpg" mos="" align="middle" fullscreen="" width="1333" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel Watch 5: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="22c8f076-9813-11f1-a997-95f735e2ff78" data-action="Deal Block" data-label="Pixel Watch 5" data-dimension48="Pixel Watch 5" data-dimension25="$199"><strong>for $5/month @ T-Mobile</strong></a><strong></strong><br>The Pixel Watch 5 sports the same design, dimensions, display, and battery life as the Pixel Watch 4. However, it offers improved GPS tracking for outdoor workouts and faster/more efficient processing power. It also supports three unique new wellness tools: Breathing Emergency Detection, Blood Pressure Trends, and Insulin Resistance Trends. In our initial <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tried-the-new-google-pixel-watch-5-and-its-new-health-and-safety-features-blow-the-apple-watch-out-of-the-water">Pixel Watch 5 hands-on</a>, we said its new Blood Pressure trends report and a monthly Insulin Resistance trends report could be revolutionary. Activate a  qualifying Watch Plan Plus 2.0 on T-Mobile and the carrier will take $300 off the watch's full price for a final monthly bill of just $5.55 over the span of 36 months. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="22c8f076-9813-11f1-a997-95f735e2ff78" data-action="Deal Block" data-label="Pixel Watch 5" data-dimension48="Pixel Watch 5" data-dimension25="$199">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&rows=6&view_mode=savings_squad&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=${siteParam}&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (!this.activeDealTag && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 40px; min-height: 40px;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 36px; min-height: 36px;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I just tried this privacy-focused version of Android for Pixel phones — and I'm very impressed ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you've been paying attention to the news, you've probably heard about <a href="https://www.tomsguide.com/features/i-tried-de-googled-android-again-heres-how-that-went">GrapheneOS</a>. The Android-based mobile OS hit the news a few weeks back over a dispute at the U.S. border, in which a traveller is <a href="https://www.theguardian.com/us-news/2026/jul/23/cop-city-protester-phone" target="_blank">alleged</a> to have wiped their GrapheneOS-powered phone using a "duress" password — and now faces charges of destroying evidence.</p><p>You may have heard about GrapheneOS but never gave it much thought for one reason or another. I know that was the case with me, and while I knew it was based on Android I hadn't ever done much digging into exactly how it differed from the Google-provided Android experience. </p><p>But this news got me curious, and I realized that it was about time I got to grips with what Graphene actually has to offer.</p><h2 id="what-is-grapheneos">What is GrapheneOS?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3304px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="bxXU699NHbMwCDf8wusrYT" name="Graphine OS 2" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/bxXU699NHbMwCDf8wusrYT.jpg" mos="" align="middle" fullscreen="" width="3304" height="1858" 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></strong><a href="https://grapheneos.org/" target="_blank" rel="nofollow"><strong>GrapheneOS</strong></a><strong> is an open source mobile operating system that emphasizes both security and privacy. </strong>It's completely free to install, and the project is supported by donations.</p><p>The software is built with the Android Open Source Project, and is focused on one of the biggest issues many people have with Google's mobile OS — the fact that it's severely lacking when it comes to protecting user privacy.</p><p>GrapheneOS also strips out most Google systems and bloatware, which means you won't set up your phone and find that it's filled with a bunch of apps that you can't remove. The software also features a bunch of dedicated privacy features that you won't find on most Android phones.</p><h2 id="grapheneos-device-support-which-phones-does-it-work-with">GrapheneOS device support: Which phones does it work with?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3267px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="33F6Y3eo7XiYSDEg5va2YT" name="Graphine OS 3" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/33F6Y3eo7XiYSDEg5va2YT.jpg" mos="" align="middle" fullscreen="" width="3267" height="1838" 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>GrapheneOS is currently only officially compatible with Pixel phones, with the site listing all Google-made phones up to (and including) the <a href="https://www.tomsguide.com/reviews/google-pixel-6">Google Pixel 6</a> and <a href="https://www.tomsguide.com/reviews/google-pixel-6-pro">6 Pro</a>. The <a href="https://www.tomsguide.com/reviews/google-pixel-tablet">Pixel Tablet</a> is also supported.</p><p>The software's official support pages confirm that other devices do support GrapheneOS "at a source level," but without official support it means that more work is needed to actually install the software — which makes everything a lot more complicated.</p><p>Earlier this year Motorola <a href="https://motorolanews.com/motorola-three-new-b2b-solutions-at-mwc-2026/" target="_blank">confirmed</a> it had partnered with GrapheneOS, with the aim to "strengthen smartphone security and collaborate on future devices engineered with GrapheneOS compatibility. " In other words, future Motorola devices will eventually support GrapheneOS as well. But we don't know which devices will offer it, or when they will be released.</p><h2 id="how-do-you-actually-install-it">How do you actually install it?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3292px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="yFWXb3uNikfB4NBm6wnTWT" name="Graphine OS 4" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/yFWXb3uNikfB4NBm6wnTWT.jpg" mos="" align="middle" fullscreen="" width="3292" height="1852" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I've never really been one for tinkering with software, and it's never really been something that interested me. I did try my hand at rooting one of my Android phones about ten years ago, to see what I might be missing out on, but never made much progress. </p><div><blockquote><p>All the hard work is done by GrapheneOS's Web Installer, which makes the process more or less idiotproof. Best of all, you don't even need to root your phone.</p></blockquote></div><p>The phones I had at the time came from companies that weren't very big on letting people mess with their phones' software, and trying to root them proved to be a task worthy of Sisyphus himself. Obviously, being the quitter that I am, I gave up and never bothered to try that sort of thing ever again.</p><p>That's partly why I never gave GrapheneOS a second thought. I wasn't sure what to expect when I finally decided to try and install it on one of my older phones.</p><p>GrapheneOS has a full guide on how to install the software on a compatible phone, and at first glance looks a little intimidating. It has its own table of contents, and that's never something you want to see when you don't really know what you're doing. Fortunately, the whole process is actually pretty simple, and based on my experience it's quite difficult to screw up.</p><p>I'll admit that I did screw up a couple of times because I wasn't reading the instructions carefully, and the worst thing that happened was that I had to wait for my phone to restart — at which point I ended up exactly where I left off. </p><p>All the actual hard work is done by GrapheneOS's <a href="https://grapheneos.org/install/web" target="_blank">Web Installer</a>, which makes the process more or less idiotproof. Best of all, you don't even need to root your phone.</p><p>Reverting back is proving to be a little trickier for me, simply because I couldn't get GrapheneOS's web installer to recognize that my phone is available and needs its bootloader unlocked. That's going to require some troubleshooting on my end.</p><h2 id="what-is-grapheneos-actually-like">What is GrapheneOS actually 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:3567px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="Kw8QBBMp7uahQMTtPuNZZT" name="Graphine OS 5" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/Kw8QBBMp7uahQMTtPuNZZT.jpg" mos="" align="middle" fullscreen="" width="3567" height="2006" 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 first thing I noticed about GrapheneOS is just how sparse the software selection actually is from a design point of view. This is a version of Android software that is effectively free of all Google influence, and that means the number of pre-installed apps is at its bare minimum.</p><p>After years of using smartphones running Android and iOS, this is actually quite refreshing. It's like finding yourself in a quiet, minimally-furnished room after walking off a crowded city street. The lower emphasis on Google products also makes the setup process a lot smoother, since you don't have to link to Google accounts or deal with setting up features like Gemini.</p><p>It's a similar story with the built-in App Store. Since there are no Google apps pre-installed, this is the place that lets you install certain Android features like Android Auto, the Thermometer app (if you have a compatible Pixel) and other app stores — including Google Play. There are only 14 apps available, and anything else you need has to be acquired from a different source.</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:3750px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="AvPBSzVsG3ZQcoAmjiQ8aT" name="Graphine OS 6" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/AvPBSzVsG3ZQcoAmjiQ8aT.jpg" mos="" align="middle" fullscreen="" width="3750" height="2109" 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 distinct lack of color when GrapheneOS loads up for the first time is rather jarring, if I'm being totally honest. But that's a non-issue that quickly solves itself once you actually start using the phone. </p><p>If you're familiar with stock Android or Google's Pixel Launcher skin, then GrapheneOS isn't going to be that much of a surprise. The developers haven't taken many, if any, liberties with the general feel of the software. This means navigating and accessing the various settings menus is pretty simple, and doesn't require having to relearn where everything is. You can't say that for other smartphone brands.</p><p>It's not exactly the same under the hood, though, and there are some <a href="https://grapheneos.org/features" target="_blank">extra optional features</a> that are designed for security and privacy reasons. This includes the duress password, PIN scrambling, and a bunch more things I don't have room to list here. There's a lot to come to grips with, and so far I haven't actually made a huge dent.</p><p>Sadly, there is one catch I've found so far, and that's the fact my phone always warns me that I'm loading up a different operating system. It doesn't require you to confirm you want this to happen, but it is a little annoying that you don't seem to be able to switch this off.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XkwLZX"></div>                            </div>                            <script src="https://kwizly.com/embed/XkwLZX.js" async></script><h2 id="the-google-play-conundrum">The Google Play conundrum</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4080px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kv9Z7azaLFUbA3TixFM2cT" name="Graphine OS 7" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/kv9Z7azaLFUbA3TixFM2cT.jpg" mos="" align="middle" fullscreen="" width="4080" height="2295" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>You may wonder what the point of having GrapheneOS is if you're just going to install Google Play? The sad thing about Android is that some apps won't work without Google Play Services installed, which means sideloading or using a third-party app store won't work. </p><div><blockquote><p>You can still enjoy access to apps that are only compatible with Google Play, but without handing over unfiltered access to the software.</p></blockquote></div><p>Banking apps are the one that caught me off guard, and it meant that I would either have to rely on browser-based banking (which is not ideal) or bite the bullet and install Google Play.</p><p>Thankfully, GrapheneOS does have a compromise, and sandboxes Google Play Services so that it doesn't have the same level of privileged access you'll see with a typical Android OS. This effectively means you can still enjoy access to apps that are only compatible with Google Play, but without handing over unfiltered access to the software.</p><p>As this thread on <a href="https://www.reddit.com/r/GrapheneOS/comments/1rxzgay/comment/obcl8p4/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button" target="_blank">Reddit</a> put it, the idea behind Graphene isn't to deGoogle. The software comes with a Chromium-based browser after all, albeit with more security-focused features than the stock Chrome app. You can deGoogle if you like, but that's not something that is forced upon you.</p><p>Sideloading is possible, since Graphene is an Android-based operating system, but it's up to you to decide which app-installation option is the right one for you.</p><h2 id="bottom-line-2">Bottom line</h2><p>The switch over to GrapheneOS wasn't as drastic as I expected it would be. Not only was the installation an absolute cinch, the fact it looks and feels so close to stock Android means that there isn't much of a learning curve when it comes to getting started. All you really need to do is figure out where all the extra privacy and security features are. </p><p>The switch rom Google services is certainly very appealing. While I wouldn't go completely cold turkey (I need my banking apps), the fact that Google Play is available in a sandbox means that you don't appear to be missing out on much by ditching the Pixels' particular brand of Android. It's rather like having the most important parts of the Android ecosystem, but without compromising your own personal privacy in the process.</p><p>Switching back to the Pixel's Android OS has proved a little difficult, and I'm not entirely sure where the problem lies. So for now, I recommend that anyone hoping to try GrapheneOS for themselves either knows more than I do about installing Android software, or tests it out on an older device first to make sure they like it.</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/the-pixel-11s-tensor-g6-chip-isnt-2nm-despite-the-rumors-opening-the-door-for-iphone-18-pro">The Pixel 11's Tensor G6 chip isn't 2nm despite the rumors — opening the door for iPhone 18 Pro</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-brings-5-star-ratings-to-photos-here-is-how-to-use-them">iOS 27 brings 5-star ratings to Photos — here is how to use them</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-wanted-to-be-excited-about-the-pixel-11-but-google-has-made-that-impossible-with-the-most-uninspired-launch-ive-ever-seen">I've been using Pixel phones for the past 5 years, but the lack of Pixel 11 upgrades is indefensible</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/i-just-tried-this-privacy-focused-version-of-android-for-pixel-phones-and-im-very-impressed</link>
                                                                            <description>
                            <![CDATA[ If you want some extra privacy on your phone, it might be worth installing GrapheneOS. It actually feels more like Android than a lot of other Android phones. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">RCNbBs9riBmkjZPMna3Yjh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/2xpFjRFjdZTcjkT8YEZGYT-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 15 Aug 2026 09:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/2xpFjRFjdZTcjkT8YEZGYT-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[GrapheneOS shown on a Pixel 9 Pro]]></media:description>                                                            <media:text><![CDATA[GrapheneOS shown on a Pixel 9 Pro]]></media:text>
                                <media:title type="plain"><![CDATA[GrapheneOS shown on a Pixel 9 Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/2xpFjRFjdZTcjkT8YEZGYT-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you've been paying attention to the news, you've probably heard about <a href="https://www.tomsguide.com/features/i-tried-de-googled-android-again-heres-how-that-went">GrapheneOS</a>. The Android-based mobile OS hit the news a few weeks back over a dispute at the U.S. border, in which a traveller is <a href="https://www.theguardian.com/us-news/2026/jul/23/cop-city-protester-phone" target="_blank">alleged</a> to have wiped their GrapheneOS-powered phone using a "duress" password — and now faces charges of destroying evidence.</p><p>You may have heard about GrapheneOS but never gave it much thought for one reason or another. I know that was the case with me, and while I knew it was based on Android I hadn't ever done much digging into exactly how it differed from the Google-provided Android experience. </p><p>But this news got me curious, and I realized that it was about time I got to grips with what Graphene actually has to offer.</p><h2 id="what-is-grapheneos">What is GrapheneOS?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3304px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="bxXU699NHbMwCDf8wusrYT" name="Graphine OS 2" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/bxXU699NHbMwCDf8wusrYT.jpg" mos="" align="middle" fullscreen="" width="3304" height="1858" 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></strong><a href="https://grapheneos.org/" target="_blank" rel="nofollow"><strong>GrapheneOS</strong></a><strong> is an open source mobile operating system that emphasizes both security and privacy. </strong>It's completely free to install, and the project is supported by donations.</p><p>The software is built with the Android Open Source Project, and is focused on one of the biggest issues many people have with Google's mobile OS — the fact that it's severely lacking when it comes to protecting user privacy.</p><p>GrapheneOS also strips out most Google systems and bloatware, which means you won't set up your phone and find that it's filled with a bunch of apps that you can't remove. The software also features a bunch of dedicated privacy features that you won't find on most Android phones.</p><h2 id="grapheneos-device-support-which-phones-does-it-work-with">GrapheneOS device support: Which phones does it work with?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3267px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="33F6Y3eo7XiYSDEg5va2YT" name="Graphine OS 3" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/33F6Y3eo7XiYSDEg5va2YT.jpg" mos="" align="middle" fullscreen="" width="3267" height="1838" 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>GrapheneOS is currently only officially compatible with Pixel phones, with the site listing all Google-made phones up to (and including) the <a href="https://www.tomsguide.com/reviews/google-pixel-6">Google Pixel 6</a> and <a href="https://www.tomsguide.com/reviews/google-pixel-6-pro">6 Pro</a>. The <a href="https://www.tomsguide.com/reviews/google-pixel-tablet">Pixel Tablet</a> is also supported.</p><p>The software's official support pages confirm that other devices do support GrapheneOS "at a source level," but without official support it means that more work is needed to actually install the software — which makes everything a lot more complicated.</p><p>Earlier this year Motorola <a href="https://motorolanews.com/motorola-three-new-b2b-solutions-at-mwc-2026/" target="_blank">confirmed</a> it had partnered with GrapheneOS, with the aim to "strengthen smartphone security and collaborate on future devices engineered with GrapheneOS compatibility. " In other words, future Motorola devices will eventually support GrapheneOS as well. But we don't know which devices will offer it, or when they will be released.</p><h2 id="how-do-you-actually-install-it">How do you actually install it?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3292px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="yFWXb3uNikfB4NBm6wnTWT" name="Graphine OS 4" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/yFWXb3uNikfB4NBm6wnTWT.jpg" mos="" align="middle" fullscreen="" width="3292" height="1852" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I've never really been one for tinkering with software, and it's never really been something that interested me. I did try my hand at rooting one of my Android phones about ten years ago, to see what I might be missing out on, but never made much progress. </p><div><blockquote><p>All the hard work is done by GrapheneOS's Web Installer, which makes the process more or less idiotproof. Best of all, you don't even need to root your phone.</p></blockquote></div><p>The phones I had at the time came from companies that weren't very big on letting people mess with their phones' software, and trying to root them proved to be a task worthy of Sisyphus himself. Obviously, being the quitter that I am, I gave up and never bothered to try that sort of thing ever again.</p><p>That's partly why I never gave GrapheneOS a second thought. I wasn't sure what to expect when I finally decided to try and install it on one of my older phones.</p><p>GrapheneOS has a full guide on how to install the software on a compatible phone, and at first glance looks a little intimidating. It has its own table of contents, and that's never something you want to see when you don't really know what you're doing. Fortunately, the whole process is actually pretty simple, and based on my experience it's quite difficult to screw up.</p><p>I'll admit that I did screw up a couple of times because I wasn't reading the instructions carefully, and the worst thing that happened was that I had to wait for my phone to restart — at which point I ended up exactly where I left off. </p><p>All the actual hard work is done by GrapheneOS's <a href="https://grapheneos.org/install/web" target="_blank">Web Installer</a>, which makes the process more or less idiotproof. Best of all, you don't even need to root your phone.</p><p>Reverting back is proving to be a little trickier for me, simply because I couldn't get GrapheneOS's web installer to recognize that my phone is available and needs its bootloader unlocked. That's going to require some troubleshooting on my end.</p><h2 id="what-is-grapheneos-actually-like">What is GrapheneOS actually 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:3567px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="Kw8QBBMp7uahQMTtPuNZZT" name="Graphine OS 5" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/Kw8QBBMp7uahQMTtPuNZZT.jpg" mos="" align="middle" fullscreen="" width="3567" height="2006" 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 first thing I noticed about GrapheneOS is just how sparse the software selection actually is from a design point of view. This is a version of Android software that is effectively free of all Google influence, and that means the number of pre-installed apps is at its bare minimum.</p><p>After years of using smartphones running Android and iOS, this is actually quite refreshing. It's like finding yourself in a quiet, minimally-furnished room after walking off a crowded city street. The lower emphasis on Google products also makes the setup process a lot smoother, since you don't have to link to Google accounts or deal with setting up features like Gemini.</p><p>It's a similar story with the built-in App Store. Since there are no Google apps pre-installed, this is the place that lets you install certain Android features like Android Auto, the Thermometer app (if you have a compatible Pixel) and other app stores — including Google Play. There are only 14 apps available, and anything else you need has to be acquired from a different source.</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:3750px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="AvPBSzVsG3ZQcoAmjiQ8aT" name="Graphine OS 6" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/AvPBSzVsG3ZQcoAmjiQ8aT.jpg" mos="" align="middle" fullscreen="" width="3750" height="2109" 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 distinct lack of color when GrapheneOS loads up for the first time is rather jarring, if I'm being totally honest. But that's a non-issue that quickly solves itself once you actually start using the phone. </p><p>If you're familiar with stock Android or Google's Pixel Launcher skin, then GrapheneOS isn't going to be that much of a surprise. The developers haven't taken many, if any, liberties with the general feel of the software. This means navigating and accessing the various settings menus is pretty simple, and doesn't require having to relearn where everything is. You can't say that for other smartphone brands.</p><p>It's not exactly the same under the hood, though, and there are some <a href="https://grapheneos.org/features" target="_blank">extra optional features</a> that are designed for security and privacy reasons. This includes the duress password, PIN scrambling, and a bunch more things I don't have room to list here. There's a lot to come to grips with, and so far I haven't actually made a huge dent.</p><p>Sadly, there is one catch I've found so far, and that's the fact my phone always warns me that I'm loading up a different operating system. It doesn't require you to confirm you want this to happen, but it is a little annoying that you don't seem to be able to switch this off.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XkwLZX"></div>                            </div>                            <script src="https://kwizly.com/embed/XkwLZX.js" async></script><h2 id="the-google-play-conundrum">The Google Play conundrum</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4080px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kv9Z7azaLFUbA3TixFM2cT" name="Graphine OS 7" alt="GrapheneOS shown on a Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/kv9Z7azaLFUbA3TixFM2cT.jpg" mos="" align="middle" fullscreen="" width="4080" height="2295" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>You may wonder what the point of having GrapheneOS is if you're just going to install Google Play? The sad thing about Android is that some apps won't work without Google Play Services installed, which means sideloading or using a third-party app store won't work. </p><div><blockquote><p>You can still enjoy access to apps that are only compatible with Google Play, but without handing over unfiltered access to the software.</p></blockquote></div><p>Banking apps are the one that caught me off guard, and it meant that I would either have to rely on browser-based banking (which is not ideal) or bite the bullet and install Google Play.</p><p>Thankfully, GrapheneOS does have a compromise, and sandboxes Google Play Services so that it doesn't have the same level of privileged access you'll see with a typical Android OS. This effectively means you can still enjoy access to apps that are only compatible with Google Play, but without handing over unfiltered access to the software.</p><p>As this thread on <a href="https://www.reddit.com/r/GrapheneOS/comments/1rxzgay/comment/obcl8p4/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button" target="_blank">Reddit</a> put it, the idea behind Graphene isn't to deGoogle. The software comes with a Chromium-based browser after all, albeit with more security-focused features than the stock Chrome app. You can deGoogle if you like, but that's not something that is forced upon you.</p><p>Sideloading is possible, since Graphene is an Android-based operating system, but it's up to you to decide which app-installation option is the right one for you.</p><h2 id="bottom-line-2">Bottom line</h2><p>The switch over to GrapheneOS wasn't as drastic as I expected it would be. Not only was the installation an absolute cinch, the fact it looks and feels so close to stock Android means that there isn't much of a learning curve when it comes to getting started. All you really need to do is figure out where all the extra privacy and security features are. </p><p>The switch rom Google services is certainly very appealing. While I wouldn't go completely cold turkey (I need my banking apps), the fact that Google Play is available in a sandbox means that you don't appear to be missing out on much by ditching the Pixels' particular brand of Android. It's rather like having the most important parts of the Android ecosystem, but without compromising your own personal privacy in the process.</p><p>Switching back to the Pixel's Android OS has proved a little difficult, and I'm not entirely sure where the problem lies. So for now, I recommend that anyone hoping to try GrapheneOS for themselves either knows more than I do about installing Android software, or tests it out on an older device first to make sure they like it.</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/the-pixel-11s-tensor-g6-chip-isnt-2nm-despite-the-rumors-opening-the-door-for-iphone-18-pro">The Pixel 11's Tensor G6 chip isn't 2nm despite the rumors — opening the door for iPhone 18 Pro</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-brings-5-star-ratings-to-photos-here-is-how-to-use-them">iOS 27 brings 5-star ratings to Photos — here is how to use them</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-wanted-to-be-excited-about-the-pixel-11-but-google-has-made-that-impossible-with-the-most-uninspired-launch-ive-ever-seen">I've been using Pixel phones for the past 5 years, but the lack of Pixel 11 upgrades is indefensible</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Level up your new Pixel 11 Pro Fold with these 15 essential cases and accessories ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google's new Pixel 11 range has been revealed – a family of four feature-packed new smartphones that elevate the Pixel range to new levels. Personally, I'm eyeing up the new Pixel 11 Pro Fold for its durable new hinge design and excellent 48MP camera.</p><p>Smartphones are expensive, though, and if you're anything like me you'll already be thinking about how you can keep yours in perfect condition. That's why I've put together this collection of some of the best Pixel 11 Pro Fold cases that are available now. I've singled out official cases from Google, as well as some of my favorite designs from other brands, too. I've also thrown in a few essential accessories, like the now iconic Ringstand, so you can fully kit your new smartphone out.</p>        <div class="featured_product_block featured_block_hero" data-id="2568eefc-97c9-11f1-a2c9-adad25e33992">            <a href="https://store.google.com/us/product/pixel_11_pro_fold_phone_case/" data-model-name="Google Pixelsnap Case for Pixel 11 Pro Fold" 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/Lj2qwFaVvD2DS8GzeWAMQX.jpg" alt="Google, Google Pixelsnap Case for Pixel 11 Pro Fold"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Case for Pixel 11 Pro Fold</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>Google Pixelsnap Case for Pixel 11 Pro Fold</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2568f0aa-97c9-11f1-a1b1-57897e17bf90">            <a href="https://store.google.com/us/product/bellroy_leather_case_pixelsnap_pixel_11_pro_fold/" data-model-name="Bellroy Leather Folio Case for Pixel 11 Pro Fold" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wYtdykE4gDAzZzHn9RbETj.jpg" alt="Bellroy, Bellroy Leather Folio with Pixelsnap for Pixel 11 Pro Fold"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Bellroy Leather Folio Case for Pixel 11 Pro Fold</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="4735c892-97f2-11f1-b144-e9f00538c212">            <a href="https://fntcase.com/en-ch/products/google-pixel-11-pro-fold-case-full-hinge-protection-magsafe-heavy-duty-rugged-shockproof-anti-scratch-protective-clear-phone-cover" data-model-name="Fntcase Google Pixel 11 Pro Fold Case (Clear)" 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/cxk59wrLAi3sR6SLAECdvh.jpg" alt="Google Pixel 11 Pro Fold Case Full Hinge Protection Magsafe Heavy Duty Rugged Shockproof Anti-Scratch Protective Clear Phone Cover"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>FNTCASE OFFICIAL</div>                                        <div class="featured__title">Fntcase Google Pixel 11 Pro Fold Case (Clear)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5532ffee-97ea-11f1-92a5-271a6a16f6c8">            <a href="https://www.amazon.com/Spigen-GaaPFD-Case-Armor-MagFit/dp/B0GJ7N9XRN/" data-model-name="Spigen Slim Armor Pro Magfit Case" 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/oa2GhCykQb4WapNadasD3b.jpg" alt="Spigen Slim Armor Pro Magfit for Google Pixel 11 Pro Fold Case, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen Slim Armor Pro Magfit Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2568f118-97c9-11f1-b909-256b0ffc4f2c">            <a href="https://www.amazon.com/Mous-Pixel-Pro-Fold-Case/dp/B0H5T94SNP/" data-model-name="Mous for Pixel 11 Pro Fold Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/bS5GWyyxtSP8qt252Et2EF.jpg" alt="Mous for Pixel 11 Pro Fold Case - Super Thin - Magsafe & Pixelsnap Compatible Black Cover"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous for Pixel 11 Pro Fold Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5532ff76-97ea-11f1-9871-0f58658a8298">            <a href="https://dbrand.com/shop/grip/google-pixel-11-pro-fold-cases?design=damascus-holo-w&srsltid=AfmBOore3m9cjEvlygBnwOZBtp1lxXqVGS0hILqoFAQojTe3O-37lAi9" data-model-name="DBrand Holo White Pixel 11 Pro Fold Case" 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/fYHyZxAiwPdwSudgkcxtqn.jpg" alt="DBrand Holo White Pixel 11 Pro Fold Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBrand</div>                                        <div class="featured__title">DBrand Holo White Pixel 11 Pro Fold Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2568f208-97c9-11f1-b121-93036368b007">            <a href="https://www.amazon.com/pitaka-Ultra-Pixel-Cover-Black/dp/B0H9LGKGS6/" data-model-name="Pitaka Ultra Slim for Pixel 11 Pro Fold Case" 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/VFsFBuBDorZKLaCd86UePF.jpg" alt="Pitaka Ultra Slim for Pixel 11 Pro Fold Case (back Cover Only), Black/grey"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Pitaka</div>                                        <div class="featured__title">Pitaka Ultra Slim for Pixel 11 Pro Fold Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2568f028-97c9-11f1-a398-9f80703e857e">            <a href="https://thinborne.com/collections/pixel-11-pro-fold-case/products/pixel-11-pro-fold-case-blue" data-model-name="ThinBorne Pixel 11 Pro Fold Case (Navy)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/huhh2KincyoENmGCvX8DoZ.jpg" alt="ThinBorne, ThinBorne Pixel 11 Pro Fold Case (Navy)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ThinBorne</div>                                        <div class="featured__title">ThinBorne Pixel 11 Pro Fold Case (Navy)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2568f190-97c9-11f1-817d-15988dbb81a7">            <a href="https://www.spigen.com/products/pixel-11-series-slim-armor-pro-case-mag-fit" data-model-name="Spigen Pixel 11 Slim Armor Pro Case" 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/NNmjDFMwLERNgHEVmPPWom.jpg" alt="Spigen, Spigen Pixel 11 – Slim Armor Pro (mag Fit)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen Pixel 11 Slim Armor Pro Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5533019c-97ea-11f1-b1be-0fef7370baf1">            <a href="https://store.google.com/us/product/pixelsnap_ring_stand/" data-model-name="Pixelsnap Ring Stand" 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/aRAVFUns5MqFLYqe4cGW38.jpg" alt="Google Pixelsnap Ring Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Pixelsnap Ring Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5533026e-97ea-11f1-922a-ab228de84d18">            <a href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QCMF5/" data-model-name="Google Pixel Buds Pro 2 (Peony)" 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/uVDMShUJWBSMeYj7GgiHed.jpg" alt="Google Pixel Buds Pro 2 - Wireless Bluetooth Earbuds - Peony"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Buds Pro 2 (Peony)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5533012e-97ea-11f1-a598-69d5cb7b2192">            <a href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0H7X25DRT/" data-model-name="Google Pixel Watch 5 (Obsidian)" 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/cf7rM99XzLPStyD5hoxMDg.jpg" alt="Google Pixel Watch 5 (41mm) - Android Smartwatch - Obsidian - Wi-Fi"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Watch 5 (Obsidian)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ae9fb668-97f3-11f1-90e9-812c69bb5940">            <a href="https://www.spigen.com/products/pixel-11-series-optik-ez-fit-lens-protector?variant=45691483029551" data-model-name="Spigen AluminaCorePixel 11 Pro Fold Screen Protector" 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/uDEHCHjDuFfmAvPa8emn3Q.jpg" alt="Pixel 11 Series - Optik Ez Fit Lens Protector"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen AluminaCorePixel 11 Pro Fold Screen Protector</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ae9fb6ea-97f3-11f1-8f7d-b5cd70eab175">            <a href="https://www.spigen.com/products/pixel-11-series-screen-protector-glas-tr-ez-fit?variant=45726307254319" data-model-name="Spigen Pixel 11 Pro Fold Lens Protector" 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/jrgux3tgmarXB2CU8vB7fQ.jpg" alt="Pixel 11 Series - Glas.tr Ez Fit Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen Pixel 11 Pro Fold Lens Protector</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="553300c0-97ea-11f1-867b-edd73bd07e3a">            <a href="https://www.amazon.com/Belkin-BOOSTCHARGE-Integrated-Integrated-Additional/dp/B08VH86B3G/" data-model-name="Belkin 10K 23W Portable Charger Power Bank" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/dok3KET9aCT92TzpxH2KNZ.jpg" alt="Belkin 10k 23w Portable Charger Power Bank, Integrated Usb C and Ltg Cables"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Belkin</div>                                        <div class="featured__title">Belkin 10K 23W Portable Charger Power Bank</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/level-up-your-new-pixel-11-pro-fold-with-these-15-essential-cases-and-accessories</link>
                                                                            <description>
                            <![CDATA[ Google's new Pixel 11 Pro Fold has arrived. If you're planning to get one, then it's a good idea to also pick up a case to protect it. I've picked out some of my favorite cases and other accessories here to help you fully kit out the new smartphone. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">F6cke3kmwmvqrXNo3ShXf8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7nWpmtPjbyW2DJs6DFq6fQ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 14 Aug 2026 19:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Will Salmon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/HpRWP7Mh9ErgRGoTvZBbBJ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Will Salmon is Tom&#039;s Guide&#039;s Collections Editor, curating advice on the best products to spend your money on. Will has been writing about tech and entertainment for almost 20 years, including stints as GamesRadar+&#039;s Streaming Editor, editing comics website Newsarama, and writing for lots and lots of magazines.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/7nWpmtPjbyW2DJs6DFq6fQ-1280-80.jpg">
                                                            <media:credit><![CDATA[Google, Pitaka / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of Pixel 11 Pro Fold accessories.]]></media:description>                                                            <media:text><![CDATA[A selection of Pixel 11 Pro Fold accessories.]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of Pixel 11 Pro Fold accessories.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7nWpmtPjbyW2DJs6DFq6fQ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google's new Pixel 11 range has been revealed – a family of four feature-packed new smartphones that elevate the Pixel range to new levels. Personally, I'm eyeing up the new Pixel 11 Pro Fold for its durable new hinge design and excellent 48MP camera.</p><p>Smartphones are expensive, though, and if you're anything like me you'll already be thinking about how you can keep yours in perfect condition. That's why I've put together this collection of some of the best Pixel 11 Pro Fold cases that are available now. I've singled out official cases from Google, as well as some of my favorite designs from other brands, too. I've also thrown in a few essential accessories, like the now iconic Ringstand, so you can fully kit your new smartphone out.</p>        <div class="featured_product_block featured_block_hero" data-id="2568eefc-97c9-11f1-a2c9-adad25e33992">            <a href="https://store.google.com/us/product/pixel_11_pro_fold_phone_case/" data-model-name="Google Pixelsnap Case for Pixel 11 Pro Fold" 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/Lj2qwFaVvD2DS8GzeWAMQX.jpg" alt="Google, Google Pixelsnap Case for Pixel 11 Pro Fold"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Case for Pixel 11 Pro Fold</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>Google Pixelsnap Case for Pixel 11 Pro Fold</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2568f0aa-97c9-11f1-a1b1-57897e17bf90">            <a href="https://store.google.com/us/product/bellroy_leather_case_pixelsnap_pixel_11_pro_fold/" data-model-name="Bellroy Leather Folio Case for Pixel 11 Pro Fold" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wYtdykE4gDAzZzHn9RbETj.jpg" alt="Bellroy, Bellroy Leather Folio with Pixelsnap for Pixel 11 Pro Fold"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Bellroy Leather Folio Case for Pixel 11 Pro Fold</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="4735c892-97f2-11f1-b144-e9f00538c212">            <a href="https://fntcase.com/en-ch/products/google-pixel-11-pro-fold-case-full-hinge-protection-magsafe-heavy-duty-rugged-shockproof-anti-scratch-protective-clear-phone-cover" data-model-name="Fntcase Google Pixel 11 Pro Fold Case (Clear)" 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/cxk59wrLAi3sR6SLAECdvh.jpg" alt="Google Pixel 11 Pro Fold Case Full Hinge Protection Magsafe Heavy Duty Rugged Shockproof Anti-Scratch Protective Clear Phone Cover"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>FNTCASE OFFICIAL</div>                                        <div class="featured__title">Fntcase Google Pixel 11 Pro Fold Case (Clear)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5532ffee-97ea-11f1-92a5-271a6a16f6c8">            <a href="https://www.amazon.com/Spigen-GaaPFD-Case-Armor-MagFit/dp/B0GJ7N9XRN/" data-model-name="Spigen Slim Armor Pro Magfit Case" 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/oa2GhCykQb4WapNadasD3b.jpg" alt="Spigen Slim Armor Pro Magfit for Google Pixel 11 Pro Fold Case, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen Slim Armor Pro Magfit Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2568f118-97c9-11f1-b909-256b0ffc4f2c">            <a href="https://www.amazon.com/Mous-Pixel-Pro-Fold-Case/dp/B0H5T94SNP/" data-model-name="Mous for Pixel 11 Pro Fold Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/bS5GWyyxtSP8qt252Et2EF.jpg" alt="Mous for Pixel 11 Pro Fold Case - Super Thin - Magsafe & Pixelsnap Compatible Black Cover"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous for Pixel 11 Pro Fold Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5532ff76-97ea-11f1-9871-0f58658a8298">            <a href="https://dbrand.com/shop/grip/google-pixel-11-pro-fold-cases?design=damascus-holo-w&srsltid=AfmBOore3m9cjEvlygBnwOZBtp1lxXqVGS0hILqoFAQojTe3O-37lAi9" data-model-name="DBrand Holo White Pixel 11 Pro Fold Case" 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/fYHyZxAiwPdwSudgkcxtqn.jpg" alt="DBrand Holo White Pixel 11 Pro Fold Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBrand</div>                                        <div class="featured__title">DBrand Holo White Pixel 11 Pro Fold Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2568f208-97c9-11f1-b121-93036368b007">            <a href="https://www.amazon.com/pitaka-Ultra-Pixel-Cover-Black/dp/B0H9LGKGS6/" data-model-name="Pitaka Ultra Slim for Pixel 11 Pro Fold Case" 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/VFsFBuBDorZKLaCd86UePF.jpg" alt="Pitaka Ultra Slim for Pixel 11 Pro Fold Case (back Cover Only), Black/grey"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Pitaka</div>                                        <div class="featured__title">Pitaka Ultra Slim for Pixel 11 Pro Fold Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2568f028-97c9-11f1-a398-9f80703e857e">            <a href="https://thinborne.com/collections/pixel-11-pro-fold-case/products/pixel-11-pro-fold-case-blue" data-model-name="ThinBorne Pixel 11 Pro Fold Case (Navy)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/huhh2KincyoENmGCvX8DoZ.jpg" alt="ThinBorne, ThinBorne Pixel 11 Pro Fold Case (Navy)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ThinBorne</div>                                        <div class="featured__title">ThinBorne Pixel 11 Pro Fold Case (Navy)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2568f190-97c9-11f1-817d-15988dbb81a7">            <a href="https://www.spigen.com/products/pixel-11-series-slim-armor-pro-case-mag-fit" data-model-name="Spigen Pixel 11 Slim Armor Pro Case" 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/NNmjDFMwLERNgHEVmPPWom.jpg" alt="Spigen, Spigen Pixel 11 – Slim Armor Pro (mag Fit)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen Pixel 11 Slim Armor Pro Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5533019c-97ea-11f1-b1be-0fef7370baf1">            <a href="https://store.google.com/us/product/pixelsnap_ring_stand/" data-model-name="Pixelsnap Ring Stand" 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/aRAVFUns5MqFLYqe4cGW38.jpg" alt="Google Pixelsnap Ring Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Pixelsnap Ring Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5533026e-97ea-11f1-922a-ab228de84d18">            <a href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QCMF5/" data-model-name="Google Pixel Buds Pro 2 (Peony)" 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/uVDMShUJWBSMeYj7GgiHed.jpg" alt="Google Pixel Buds Pro 2 - Wireless Bluetooth Earbuds - Peony"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Buds Pro 2 (Peony)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5533012e-97ea-11f1-a598-69d5cb7b2192">            <a href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0H7X25DRT/" data-model-name="Google Pixel Watch 5 (Obsidian)" 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/cf7rM99XzLPStyD5hoxMDg.jpg" alt="Google Pixel Watch 5 (41mm) - Android Smartwatch - Obsidian - Wi-Fi"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Watch 5 (Obsidian)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ae9fb668-97f3-11f1-90e9-812c69bb5940">            <a href="https://www.spigen.com/products/pixel-11-series-optik-ez-fit-lens-protector?variant=45691483029551" data-model-name="Spigen AluminaCorePixel 11 Pro Fold Screen Protector" 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/uDEHCHjDuFfmAvPa8emn3Q.jpg" alt="Pixel 11 Series - Optik Ez Fit Lens Protector"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen AluminaCorePixel 11 Pro Fold Screen Protector</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ae9fb6ea-97f3-11f1-8f7d-b5cd70eab175">            <a href="https://www.spigen.com/products/pixel-11-series-screen-protector-glas-tr-ez-fit?variant=45726307254319" data-model-name="Spigen Pixel 11 Pro Fold Lens Protector" 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/jrgux3tgmarXB2CU8vB7fQ.jpg" alt="Pixel 11 Series - Glas.tr Ez Fit Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen Pixel 11 Pro Fold Lens Protector</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="553300c0-97ea-11f1-867b-edd73bd07e3a">            <a href="https://www.amazon.com/Belkin-BOOSTCHARGE-Integrated-Integrated-Additional/dp/B08VH86B3G/" data-model-name="Belkin 10K 23W Portable Charger Power Bank" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/dok3KET9aCT92TzpxH2KNZ.jpg" alt="Belkin 10k 23w Portable Charger Power Bank, Integrated Usb C and Ltg Cables"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Belkin</div>                                        <div class="featured__title">Belkin 10K 23W Portable Charger Power Bank</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Upgrade your new Pixel 11 with these 15 must-have cases and add-ons ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google's new range of Pixel smartphones is here! Officially revealed at this year's Made by Google event, four new smartphones were unveiled: The Google Pixel 11, Pixel 11 Pro, Pixel 11 Pro XL, and Google Pixel 11 Fold.</p><p>If you're planning on picking up the standard Pixel 11 then you'll want to make sure that you keep it in prime condition. That's why I've put together this selection of some of my favorite phone cases that are already available for the new device – from Google's own official case to some great options from third party manufacturers. </p><p>As the Pixel 11 is part of the wider Google ecosystem, I've also included a few of the wide range of additional accessories that work with the phone, too. You can check out all of my picks below...</p>        <div class="featured_product_block featured_block_hero" data-id="9f629166-9730-11f1-a4b3-4fde201cd492">            <a href="https://store.google.com/us/product/pixel_11_pro_phone_case?hl=en-US" data-model-name="Google Pixelsnap Case for Pixel 11" 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/TM7ftQBGX4zzoMaWoTE2Nc.jpg" alt="Google, Google Pixelsnap Case for Pixel 11/, Pixel 11 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Case for Pixel 11</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9f62901c-9730-11f1-afaf-cb2541157c4b">            <a href="https://www.amazon.com/FNTCASE-Google-Pixel-Pro-Case/dp/B0GZ2S9SRS/" data-model-name="Fntcase for Google Pixel 11" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/BnznoHEgJ6dEJ8hWtBEwBP.jpg" alt="FNTCASE, Fntcase for Google Pixel 11 Pro Case / Pixel 11 Case, With Screen Protector"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>FNTCASE</div>                                        <div class="featured__title">Fntcase for Google Pixel 11</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="59283b42-97fd-11f1-9805-b508a95e1a30">            <a href="https://www.amazon.com/Ringke-Google-Pixel-Screen-Protector/dp/B0HF6KFTGN/" data-model-name="Ringke for Google Pixel 11 Case & Screen Protector" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/gC8HqXBbwSzJdskWMDArVG.jpg" alt="Ringke, Ringke for Google Pixel 11 Case & Screen Protector"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ringke</div>                                        <div class="featured__title">Ringke for Google Pixel 11 Case & Screen Protector</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9f6290f8-9730-11f1-ac30-cd7b973ad16a">            <a href="https://www.mous.co/products/super-thin-lightweight-phone-case-hot-coral?userRedirect=US&variant=64212575519097" data-model-name="Mous Super Thin Phone Case (Hot Coral)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/8c2i5W85oPw74DNBVgcFyX.jpg" alt="Hot Coral, Super Thin Phone Case - Hot Coral"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous Super Thin Phone Case (Hot Coral)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569c7e-97e1-11f1-be92-5fff905c2384">            <a href="https://www.mous.co/products/limitless-magnetic-compatible-phone-case-walnut?variant=64212576272761" data-model-name="Mous Limitless Phone Case (Walnut)" 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/cngNVSsb5BdarM4fsBxdQb.jpg" alt="Mous, Mous Limitless Phone Case (Walnut)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous Limitless Phone Case (Walnut)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569cec-97e1-11f1-8539-ad5f86b86e1b">            <a href="https://case-mate.com/products/floral-gems-with-magnet-pixel-11/" data-model-name="Case-Mate Floral Gems Case" 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/teAP9AtUGJp2PT55j9ma7k.jpg" alt="Floral Gems With Magnet - Pixel 11"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Case-Mate</div>                                        <div class="featured__title">Case-Mate Floral Gems Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9f6291ca-9730-11f1-b9ec-531a95baaa77">            <a href="https://www.spigen.com/products/pixel-11-series-case-tough-armor-mag-fit" data-model-name="Spigen Pixel 11 Tough Armor Case" 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/V9eERThbLg3UNYM3dytq7h.jpg" alt="Spigen, Spigen Pixel 11 Tough Armor Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen Pixel 11 Tough Armor Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569d5a-97e1-11f1-a4a2-3b6c5c78dc1c">            <a href="https://www.mous.co/products/protective-clear-phone-case-magnetic-clarity?variant=41587143606330" data-model-name="Mous Clarity Pixel 11 Phone Case" 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/swAGR2SwY2coRHFLE7oRSd.jpg" alt="Clear Magsafe, Clarity Phone Case - Clear Magsafe"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous Clarity Pixel 11 Phone Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9f62908a-9730-11f1-80f0-3bea0fdb6bd0">            <a href="https://thinborne.com/products/pixel-11-case-black?_pos=6&_sid=54bd22ab1&_ss=r" data-model-name="ThinBorne Pixel 11 Case (Black)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/M2SV7DQMA4dcbQUKEEkV8Q.jpg" alt="ThinBorne, Pixel 11 Case - Unbelievably Thin | Aramid Fiber | Magsafe - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ThinBorne</div>                                        <div class="featured__title">ThinBorne Pixel 11 Case (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569dc8-97e1-11f1-a616-8f050c5de93a">            <a href="https://store.google.com/us/product/pixelsnap_ring_stand?hl=en-US&srsltid=AfmBOorkUr25CauJygbTXFkMIfi6hBJD3kknjfa81ETUyZk5Jr7B8n2S&selections=eyJwcm9kdWN0RmFtaWx5IjoiWkdWMmFXTmxYMlpoYldsc2VWOWZjR2w0Wld4emJtRndYM0pwYm1kZmMzUmhibVJmWm1GdCJ9" data-model-name="Google Pixelsnap Ring Stand" 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/aRAVFUns5MqFLYqe4cGW38.jpg" alt="Google Pixelsnap Ring Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Ring Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569e36-97e1-11f1-8069-43d1c365ad29">            <a href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QCMF5/" data-model-name="Google Pixel Buds Pro 2 - Wireless Bluetooth Earbuds - Peony" 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/Tcfdi5uZJuMT3fdTVwYjeA.jpg" alt="Google Pixel Buds Pro 2 - Wireless Bluetooth Earbuds - Peony"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Buds Pro 2 - Wireless Bluetooth Earbuds - Peony</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569e9a-97e1-11f1-a08f-bf9863ddb596">            <a href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0H7X25DRT/" data-model-name="Google Pixel Watch 5 (Obsidian)" 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/h2UXcYwqoYMNniNtRFbYja.jpg" alt="Google Pixel Watch 5 (41mm) - Android Smartwatch - Obsidian - Wi-Fi"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Watch 5 (Obsidian)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569ef4-97e1-11f1-bacb-274800eaf0cf">            <a href="https://www.amazon.com/OMOTON-Google-Screen-Protector-6-3-inch/dp/B0H5K5PGYY/" data-model-name="Google Pixel 11 Screen Protector 6.3-Inch" 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/MPNAsDoXnjwb2EG6F2Lhi9.jpg" alt="Omoton 3+2 Pack for Google Pixel 11 Screen Protector 6.3-Inch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>OMOTON</div>                                        <div class="featured__title">Google Pixel 11 Screen Protector 6.3-Inch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569f58-97e1-11f1-91f2-551d3d97ce6d">            <a href="https://www.amazon.com/Spigen-MagSafe-Compatible-MagSafe-Cases-Pixelsnap/dp/B0GDRZHP1W/" data-model-name="Spigen for Magsafe Wallet" 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/ifsy4VEdmyN7rtG5j3fiQS.jpg" alt="Spigen for Magsafe Wallet, Holds 5 Cards, Strong Magnet, Valentinus Magfit+"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Magsafe Wallet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569fbc-97e1-11f1-8eb7-9558fafb3d81">            <a href="https://www.amazon.com/Belkin-BOOSTCHARGE-Integrated-Integrated-Additional/dp/B08VH86B3G/" data-model-name="Belkin 10K 23W Portable Power Bank" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cZ9FTZcazPcttZP92gGEBX.jpg" alt="Belkin 10k 23w Portable Charger Power Bank, Integrated Usb C and Ltg Cables"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Belkin</div>                                        <div class="featured__title">Belkin 10K 23W Portable Power Bank</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/upgrade-your-new-pixel-11-with-these-15-must-have-cases-and-add-ons</link>
                                                                            <description>
                            <![CDATA[ If you're planning on buying one of Google's new Pixel 11 smartphones then you'll want to kit it out with some protective gear. Take a look at our roundup of the best Pixel 11 cases and accessories below. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">G62PuBXQ9ewnj5HWpg8ax5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ULboMerErwCDcwtMN2LGMD-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 14 Aug 2026 17:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Will Salmon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/HpRWP7Mh9ErgRGoTvZBbBJ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Will Salmon is Tom&#039;s Guide&#039;s Collections Editor, curating advice on the best products to spend your money on. Will has been writing about tech and entertainment for almost 20 years, including stints as GamesRadar+&#039;s Streaming Editor, editing comics website Newsarama, and writing for lots and lots of magazines.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ULboMerErwCDcwtMN2LGMD-1280-80.jpg">
                                                            <media:credit><![CDATA[Google, Mous / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of Pixel 11 cases and accessories]]></media:description>                                                            <media:text><![CDATA[A selection of Pixel 11 cases and accessories]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of Pixel 11 cases and accessories]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ULboMerErwCDcwtMN2LGMD-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google's new range of Pixel smartphones is here! Officially revealed at this year's Made by Google event, four new smartphones were unveiled: The Google Pixel 11, Pixel 11 Pro, Pixel 11 Pro XL, and Google Pixel 11 Fold.</p><p>If you're planning on picking up the standard Pixel 11 then you'll want to make sure that you keep it in prime condition. That's why I've put together this selection of some of my favorite phone cases that are already available for the new device – from Google's own official case to some great options from third party manufacturers. </p><p>As the Pixel 11 is part of the wider Google ecosystem, I've also included a few of the wide range of additional accessories that work with the phone, too. You can check out all of my picks below...</p>        <div class="featured_product_block featured_block_hero" data-id="9f629166-9730-11f1-a4b3-4fde201cd492">            <a href="https://store.google.com/us/product/pixel_11_pro_phone_case?hl=en-US" data-model-name="Google Pixelsnap Case for Pixel 11" 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/TM7ftQBGX4zzoMaWoTE2Nc.jpg" alt="Google, Google Pixelsnap Case for Pixel 11/, Pixel 11 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Case for Pixel 11</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9f62901c-9730-11f1-afaf-cb2541157c4b">            <a href="https://www.amazon.com/FNTCASE-Google-Pixel-Pro-Case/dp/B0GZ2S9SRS/" data-model-name="Fntcase for Google Pixel 11" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/BnznoHEgJ6dEJ8hWtBEwBP.jpg" alt="FNTCASE, Fntcase for Google Pixel 11 Pro Case / Pixel 11 Case, With Screen Protector"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>FNTCASE</div>                                        <div class="featured__title">Fntcase for Google Pixel 11</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="59283b42-97fd-11f1-9805-b508a95e1a30">            <a href="https://www.amazon.com/Ringke-Google-Pixel-Screen-Protector/dp/B0HF6KFTGN/" data-model-name="Ringke for Google Pixel 11 Case & Screen Protector" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/gC8HqXBbwSzJdskWMDArVG.jpg" alt="Ringke, Ringke for Google Pixel 11 Case & Screen Protector"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ringke</div>                                        <div class="featured__title">Ringke for Google Pixel 11 Case & Screen Protector</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9f6290f8-9730-11f1-ac30-cd7b973ad16a">            <a href="https://www.mous.co/products/super-thin-lightweight-phone-case-hot-coral?userRedirect=US&variant=64212575519097" data-model-name="Mous Super Thin Phone Case (Hot Coral)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/8c2i5W85oPw74DNBVgcFyX.jpg" alt="Hot Coral, Super Thin Phone Case - Hot Coral"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous Super Thin Phone Case (Hot Coral)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569c7e-97e1-11f1-be92-5fff905c2384">            <a href="https://www.mous.co/products/limitless-magnetic-compatible-phone-case-walnut?variant=64212576272761" data-model-name="Mous Limitless Phone Case (Walnut)" 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/cngNVSsb5BdarM4fsBxdQb.jpg" alt="Mous, Mous Limitless Phone Case (Walnut)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous Limitless Phone Case (Walnut)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569cec-97e1-11f1-8539-ad5f86b86e1b">            <a href="https://case-mate.com/products/floral-gems-with-magnet-pixel-11/" data-model-name="Case-Mate Floral Gems Case" 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/teAP9AtUGJp2PT55j9ma7k.jpg" alt="Floral Gems With Magnet - Pixel 11"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Case-Mate</div>                                        <div class="featured__title">Case-Mate Floral Gems Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9f6291ca-9730-11f1-b9ec-531a95baaa77">            <a href="https://www.spigen.com/products/pixel-11-series-case-tough-armor-mag-fit" data-model-name="Spigen Pixel 11 Tough Armor Case" 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/V9eERThbLg3UNYM3dytq7h.jpg" alt="Spigen, Spigen Pixel 11 Tough Armor Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen Pixel 11 Tough Armor Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569d5a-97e1-11f1-a4a2-3b6c5c78dc1c">            <a href="https://www.mous.co/products/protective-clear-phone-case-magnetic-clarity?variant=41587143606330" data-model-name="Mous Clarity Pixel 11 Phone Case" 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/swAGR2SwY2coRHFLE7oRSd.jpg" alt="Clear Magsafe, Clarity Phone Case - Clear Magsafe"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Mous</div>                                        <div class="featured__title">Mous Clarity Pixel 11 Phone Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9f62908a-9730-11f1-80f0-3bea0fdb6bd0">            <a href="https://thinborne.com/products/pixel-11-case-black?_pos=6&_sid=54bd22ab1&_ss=r" data-model-name="ThinBorne Pixel 11 Case (Black)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/M2SV7DQMA4dcbQUKEEkV8Q.jpg" alt="ThinBorne, Pixel 11 Case - Unbelievably Thin | Aramid Fiber | Magsafe - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ThinBorne</div>                                        <div class="featured__title">ThinBorne Pixel 11 Case (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569dc8-97e1-11f1-a616-8f050c5de93a">            <a href="https://store.google.com/us/product/pixelsnap_ring_stand?hl=en-US&srsltid=AfmBOorkUr25CauJygbTXFkMIfi6hBJD3kknjfa81ETUyZk5Jr7B8n2S&selections=eyJwcm9kdWN0RmFtaWx5IjoiWkdWMmFXTmxYMlpoYldsc2VWOWZjR2w0Wld4emJtRndYM0pwYm1kZmMzUmhibVJmWm1GdCJ9" data-model-name="Google Pixelsnap Ring Stand" 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/aRAVFUns5MqFLYqe4cGW38.jpg" alt="Google Pixelsnap Ring Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixelsnap Ring Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569e36-97e1-11f1-8069-43d1c365ad29">            <a href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QCMF5/" data-model-name="Google Pixel Buds Pro 2 - Wireless Bluetooth Earbuds - Peony" 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/Tcfdi5uZJuMT3fdTVwYjeA.jpg" alt="Google Pixel Buds Pro 2 - Wireless Bluetooth Earbuds - Peony"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Buds Pro 2 - Wireless Bluetooth Earbuds - Peony</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569e9a-97e1-11f1-a08f-bf9863ddb596">            <a href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0H7X25DRT/" data-model-name="Google Pixel Watch 5 (Obsidian)" 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/h2UXcYwqoYMNniNtRFbYja.jpg" alt="Google Pixel Watch 5 (41mm) - Android Smartwatch - Obsidian - Wi-Fi"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Watch 5 (Obsidian)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569ef4-97e1-11f1-bacb-274800eaf0cf">            <a href="https://www.amazon.com/OMOTON-Google-Screen-Protector-6-3-inch/dp/B0H5K5PGYY/" data-model-name="Google Pixel 11 Screen Protector 6.3-Inch" 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/MPNAsDoXnjwb2EG6F2Lhi9.jpg" alt="Omoton 3+2 Pack for Google Pixel 11 Screen Protector 6.3-Inch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>OMOTON</div>                                        <div class="featured__title">Google Pixel 11 Screen Protector 6.3-Inch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569f58-97e1-11f1-91f2-551d3d97ce6d">            <a href="https://www.amazon.com/Spigen-MagSafe-Compatible-MagSafe-Cases-Pixelsnap/dp/B0GDRZHP1W/" data-model-name="Spigen for Magsafe Wallet" 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/ifsy4VEdmyN7rtG5j3fiQS.jpg" alt="Spigen for Magsafe Wallet, Holds 5 Cards, Strong Magnet, Valentinus Magfit+"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Magsafe Wallet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45569fbc-97e1-11f1-8eb7-9558fafb3d81">            <a href="https://www.amazon.com/Belkin-BOOSTCHARGE-Integrated-Integrated-Additional/dp/B08VH86B3G/" data-model-name="Belkin 10K 23W Portable Power Bank" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cZ9FTZcazPcttZP92gGEBX.jpg" alt="Belkin 10k 23w Portable Charger Power Bank, Integrated Usb C and Ltg Cables"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Belkin</div>                                        <div class="featured__title">Belkin 10K 23W Portable Power Bank</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've been using Pixel phones for the past 5 years, but the lack of Pixel 11 upgrades is indefensible ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I've been using Pixel phones for the past five years now, starting with the <a href="https://www.tomsguide.com/reviews/google-pixel-6-pro">Pixel 6 Pro</a>. Over the years I have learned to live with the various disappointments that come with Pixel hardware, for the simple fact that Pixel software is the only mainstream mobile OS that I actually like using. But it's getting to the stage where Google's decisions are becoming indefensible.</p><p>Google just had its annual "<a href="https://www.tomsguide.com/news/live/made-by-google-2026-live">Made by Google" event</a>, and with it came the official launch of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a> series of phones — plus a <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tried-the-new-google-pixel-watch-5-and-its-new-health-and-safety-features-blow-the-apple-watch-out-of-the-water">new Pixel 5 watch</a> and <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">a Pixel Tag Bluetooth tracker.</a> I haven't spent a lot of time with the new Pixels yet, but my overall impression based on what Google has revealed is that it's an incredibly lazy upgrade. </p><p>It's not as lazy as the <a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-using-the-pixel-10a-for-a-week-heres-what-i-like-and-dont-like-about-googles-new-budget-phone">Pixel 10a</a>, which was easily one of the worst "upgrades" I've seen a phone company try and hawk throughout my career. But it isn't far off, and it's enough to make you wonder<a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones"> why Google is still bothering to make phones.</a></p><h2 id="the-pixel-11-problem">The Pixel 11 problem</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4192px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tz7X2mBLxChtjfsg5nAkzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/tz7X2mBLxChtjfsg5nAkzf.jpg" mos="" align="middle" fullscreen="" width="4192" height="2358" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>If you look at the Pixel 11 series and compare it to what's come before, you'll notice that there isn't a whole lot of difference between them all. I'm not just talking about the design, which has only had minor tweaks to the camera bar and, in the case of the Pro models, a new scratch-resistant coating on the display.</p><div><blockquote><p>The upgrades we're actually getting feel as though Google is phoning it in because they have to release something.</p></blockquote></div><p>The hardware is more or less the same on paper, and the upgrades that we do get feel like the absolute bare minimum of what Google could actually offer. There's the usual incremental stuff, like the Tensor G6, and the brighter Super Actua Displays, alongside small quality of life upgrades like 256GB of base storage and faster 25W wireless charging speeds. </p><p>Those last two were also found on the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL</a> last year, which means that the largest Pixel 11 model really got the short end of the stick when it comes to new stuff. </p><h2 id="pixel-11-where-are-the-big-camera-upgrades">Pixel 11: Where are the big camera upgrades?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5702px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="svKJ59b4RYwJZ5Pu9nKQ4g" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/svKJ59b4RYwJZ5Pu9nKQ4g.jpg" mos="" align="middle" fullscreen="" width="5702" height="3207" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>I have very mixed feelings about the camera, because at first glance it seems as though things are identical to the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro</a>. That's not entirely true, but considering the Pixel 10 Pro's cameras were the same as the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-review">Pixel 9 Pro's</a>, and produced photos that were indistinguishable, the lack of new hardware is still rather disappointing.</p><p>The Pros' main lens is the same, though the official specs show that the ultrawide and telephoto lenses both have larger sensors. This means both lenses will capture extra light, which improves low-light performance and captures much cleaner images in a variety of conditions.</p><p>The Pixel 11 also promises to have a larger sensor on the main lens, though the rest of the cameras don't seem to have changed.</p><p>To make matters worse, the cheapest Pro models, which have 256GB of storage, have actually had a RAM downgrade. Considering RAM is essential for on-device AI, the loss of 4GB is just another proverbial kick in the head.</p><p>I don't imagine that the Pixel 11 will be a bad phone, but there's nothing really exciting about these devices. In fact, the upgrades we do have here feel as though Google is phoning it in because they have to release <em>something</em>.</p><p>Obviously, things might change once we can test the Pixel 11 and find out whether it's had a magical boost to performance or battery life. But until then it feels as though everything has been put together with cool disinterest, if not active laziness.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePavoW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePavoW.js" async></script><h2 id="it-feels-like-google-is-getting-lazy">It feels like Google is getting lazy</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5580px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wvitGiz8Uh2yNwa9gnVzuf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/wvitGiz8Uh2yNwa9gnVzuf.jpg" mos="" align="middle" fullscreen="" width="5580" height="3139" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>There's far more to a new phone than having a bunch of flashy hardware, and you can't have incredible game-changing upgrades every single year. But it still feels as though the Pixel 11 series lacks the thing that would actually make the phone appealing to people. Because the Pixel 11 Pro's HiLight feature sure as heck doesn't make me want to drop over a grand on a new device.</p><p>The Pixel 11 isn't nearly as lazy as the Pixel 10a, which was left with the same Tensor G4 chipset as the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9a-review">Pixel 9a</a>. Back in February, I claimed that there <a href="https://www.tomsguide.com/phones/google-pixel-phones/there-is-no-good-reason-to-buy-a-pixel-10a-buy-a-pixel-9a-instead">was no good reason to buy a Pixel 10a</a>, at least not while the Pixel 9a was still on sale, and I stand by that assessment. </p><div><blockquote><p>If Pixel phones are supposed to be the idealized version of what an Android phone can be, then Google seems to be doing a pretty shoddy job of it.</p></blockquote></div><p>I'm not sure I'd go so far as to say that the Pixel 11 is a pointless upgrade. It's certainly uninspiring and lacking in any exciting qualities. Even the new AI features, which Google has spent a great deal of time and money pushing with each successive Pixel launch, are rather disappointing this year. Not in terms of what they can do, but because there are so few of them this year.</p><p>Rambler sounds great, especially since Apple's own <a href="https://www.tomsguide.com/phones/iphones/ios-27-beta-has-new-and-improved-dictation-software-i-tested-it-by-writing-this-whole-article-with-my-voice">AI-powered dictation model is coming as part of iOS 27</a>, and real-time speech-to-speech translation will never not be useful. Gemini Omni is not something I personally care about, but if it improves the quality of Gemini's generative capabilities and makes them easier to use then I can certainly see the importance of it. Similarly, 120x Super Pro-Res Zoom is a nice upgrade to the existing 100x zooming capabilities</p><p>But that's all there is, and like the hardware side of things it feels like Google just does not care about what the Pixel 11 series has to offer on the software side. The same is true for <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</a>, come to think of it, and off the top of my head I can't recall anything particularly noteworthy in the update. I certainly didn't notice any change when my phone auto-updated during the middle of the night.</p><p>Figuring out a way to make people care about your next wave of devices, and the software running on it, is the end goal. But first Google needs to get off its behind and actually put the effort in.</p><h2 id="bottom-line-3">Bottom line</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5072px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ffw45ZAkEdKMp6a8cLtpzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/ffw45ZAkEdKMp6a8cLtpzf.jpg" mos="" align="middle" fullscreen="" width="5072" height="2853" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The question I keep asking myself is this: Why should anyone go out and buy one of these phones? And honestly, I'm really struggling to come up with a solid answer. People that are still rocking older Pixels, such as a <a href="https://www.tomsguide.com/reviews/google-pixel-6">Pixel 6</a> or <a href="https://www.tomsguide.com/reviews/google-pixel-7">Pixel 7</a>, would probably gain a lot here — especially if battery life is anything like the Pixel 10 series. </p><p><a href="https://www.tomsguide.com/reviews/google-pixel-8">Pixel 8</a> would be borderline, but <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Pixel 9</a> and above? These phones haven't actually changed that much over the past two generations to warrant upgrading. Your best argument would be for non-users, since the standard Pixel 9 only offers two cameras, but even then you have to ask whether the money you're spending is worth it.</p><p>Last year I admitted that swapping a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-review">Pixel 9 Pro</a> for a Pixel 10 Pro was a mistake, and the new phone <a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-using-the-pixel-10-pro-for-2-months-and-i-regret-the-upgrade">didn't offer enough to make the switch worthwhile</a>. The Pixel 11 Pro takes that to a whole new level, and I know for a fact that my Pixel 10 Pro is more than good enough to last me until the launch of the Pixel 12 Pro next year — and likely beyond that.</p><p>If Pixel phones are supposed to be the idealized version of what an Android phone can be, then Google seems to be doing a pretty shoddy job of it. And it could fix that problem by actually making a phone that elicits a response beyond "huh, ok then."</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/google-bamboozled-me-into-paying-for-google-photos-a-decade-ago-and-now-its-doing-something-similar-with-the-pixel-11-pro">Google bamboozled me into paying for Google Photos a decade ago — and now it’s doing something similar with the Pixel 11 Pro</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">I held the Pixel Tag and it does one critical thing that the AirTag doesn’t — here’s what it is</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">I tried the Pixel 11 Pro Fold and it's more 'Ultra' than Samsung's foldable (for $200 less)</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/i-wanted-to-be-excited-about-the-pixel-11-but-google-has-made-that-impossible-with-the-most-uninspired-launch-ive-ever-seen</link>
                                                                            <description>
                            <![CDATA[ The Google Pixel 11 launch is the least interesting phone launch I've ever experienced, and it's going to making getting excited for future Pixel phones a lot harder. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">yRjD6PxXanBL9RGSqbF2f4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4cLTAEnni5nnA4PKm7Kv9g-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 14 Aug 2026 05:15:00 +0000</pubDate>                                                                                                                                <updated>Fri, 14 Aug 2026 12:06:52 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/4cLTAEnni5nnA4PKm7Kv9g-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 hands-on.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/4cLTAEnni5nnA4PKm7Kv9g-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I've been using Pixel phones for the past five years now, starting with the <a href="https://www.tomsguide.com/reviews/google-pixel-6-pro">Pixel 6 Pro</a>. Over the years I have learned to live with the various disappointments that come with Pixel hardware, for the simple fact that Pixel software is the only mainstream mobile OS that I actually like using. But it's getting to the stage where Google's decisions are becoming indefensible.</p><p>Google just had its annual "<a href="https://www.tomsguide.com/news/live/made-by-google-2026-live">Made by Google" event</a>, and with it came the official launch of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a> series of phones — plus a <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tried-the-new-google-pixel-watch-5-and-its-new-health-and-safety-features-blow-the-apple-watch-out-of-the-water">new Pixel 5 watch</a> and <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">a Pixel Tag Bluetooth tracker.</a> I haven't spent a lot of time with the new Pixels yet, but my overall impression based on what Google has revealed is that it's an incredibly lazy upgrade. </p><p>It's not as lazy as the <a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-using-the-pixel-10a-for-a-week-heres-what-i-like-and-dont-like-about-googles-new-budget-phone">Pixel 10a</a>, which was easily one of the worst "upgrades" I've seen a phone company try and hawk throughout my career. But it isn't far off, and it's enough to make you wonder<a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones"> why Google is still bothering to make phones.</a></p><h2 id="the-pixel-11-problem">The Pixel 11 problem</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4192px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tz7X2mBLxChtjfsg5nAkzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/tz7X2mBLxChtjfsg5nAkzf.jpg" mos="" align="middle" fullscreen="" width="4192" height="2358" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>If you look at the Pixel 11 series and compare it to what's come before, you'll notice that there isn't a whole lot of difference between them all. I'm not just talking about the design, which has only had minor tweaks to the camera bar and, in the case of the Pro models, a new scratch-resistant coating on the display.</p><div><blockquote><p>The upgrades we're actually getting feel as though Google is phoning it in because they have to release something.</p></blockquote></div><p>The hardware is more or less the same on paper, and the upgrades that we do get feel like the absolute bare minimum of what Google could actually offer. There's the usual incremental stuff, like the Tensor G6, and the brighter Super Actua Displays, alongside small quality of life upgrades like 256GB of base storage and faster 25W wireless charging speeds. </p><p>Those last two were also found on the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL</a> last year, which means that the largest Pixel 11 model really got the short end of the stick when it comes to new stuff. </p><h2 id="pixel-11-where-are-the-big-camera-upgrades">Pixel 11: Where are the big camera upgrades?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5702px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="svKJ59b4RYwJZ5Pu9nKQ4g" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/svKJ59b4RYwJZ5Pu9nKQ4g.jpg" mos="" align="middle" fullscreen="" width="5702" height="3207" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>I have very mixed feelings about the camera, because at first glance it seems as though things are identical to the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro</a>. That's not entirely true, but considering the Pixel 10 Pro's cameras were the same as the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-review">Pixel 9 Pro's</a>, and produced photos that were indistinguishable, the lack of new hardware is still rather disappointing.</p><p>The Pros' main lens is the same, though the official specs show that the ultrawide and telephoto lenses both have larger sensors. This means both lenses will capture extra light, which improves low-light performance and captures much cleaner images in a variety of conditions.</p><p>The Pixel 11 also promises to have a larger sensor on the main lens, though the rest of the cameras don't seem to have changed.</p><p>To make matters worse, the cheapest Pro models, which have 256GB of storage, have actually had a RAM downgrade. Considering RAM is essential for on-device AI, the loss of 4GB is just another proverbial kick in the head.</p><p>I don't imagine that the Pixel 11 will be a bad phone, but there's nothing really exciting about these devices. In fact, the upgrades we do have here feel as though Google is phoning it in because they have to release <em>something</em>.</p><p>Obviously, things might change once we can test the Pixel 11 and find out whether it's had a magical boost to performance or battery life. But until then it feels as though everything has been put together with cool disinterest, if not active laziness.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePavoW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePavoW.js" async></script><h2 id="it-feels-like-google-is-getting-lazy">It feels like Google is getting lazy</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5580px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wvitGiz8Uh2yNwa9gnVzuf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/wvitGiz8Uh2yNwa9gnVzuf.jpg" mos="" align="middle" fullscreen="" width="5580" height="3139" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>There's far more to a new phone than having a bunch of flashy hardware, and you can't have incredible game-changing upgrades every single year. But it still feels as though the Pixel 11 series lacks the thing that would actually make the phone appealing to people. Because the Pixel 11 Pro's HiLight feature sure as heck doesn't make me want to drop over a grand on a new device.</p><p>The Pixel 11 isn't nearly as lazy as the Pixel 10a, which was left with the same Tensor G4 chipset as the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9a-review">Pixel 9a</a>. Back in February, I claimed that there <a href="https://www.tomsguide.com/phones/google-pixel-phones/there-is-no-good-reason-to-buy-a-pixel-10a-buy-a-pixel-9a-instead">was no good reason to buy a Pixel 10a</a>, at least not while the Pixel 9a was still on sale, and I stand by that assessment. </p><div><blockquote><p>If Pixel phones are supposed to be the idealized version of what an Android phone can be, then Google seems to be doing a pretty shoddy job of it.</p></blockquote></div><p>I'm not sure I'd go so far as to say that the Pixel 11 is a pointless upgrade. It's certainly uninspiring and lacking in any exciting qualities. Even the new AI features, which Google has spent a great deal of time and money pushing with each successive Pixel launch, are rather disappointing this year. Not in terms of what they can do, but because there are so few of them this year.</p><p>Rambler sounds great, especially since Apple's own <a href="https://www.tomsguide.com/phones/iphones/ios-27-beta-has-new-and-improved-dictation-software-i-tested-it-by-writing-this-whole-article-with-my-voice">AI-powered dictation model is coming as part of iOS 27</a>, and real-time speech-to-speech translation will never not be useful. Gemini Omni is not something I personally care about, but if it improves the quality of Gemini's generative capabilities and makes them easier to use then I can certainly see the importance of it. Similarly, 120x Super Pro-Res Zoom is a nice upgrade to the existing 100x zooming capabilities</p><p>But that's all there is, and like the hardware side of things it feels like Google just does not care about what the Pixel 11 series has to offer on the software side. The same is true for <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</a>, come to think of it, and off the top of my head I can't recall anything particularly noteworthy in the update. I certainly didn't notice any change when my phone auto-updated during the middle of the night.</p><p>Figuring out a way to make people care about your next wave of devices, and the software running on it, is the end goal. But first Google needs to get off its behind and actually put the effort in.</p><h2 id="bottom-line-3">Bottom line</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5072px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ffw45ZAkEdKMp6a8cLtpzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/ffw45ZAkEdKMp6a8cLtpzf.jpg" mos="" align="middle" fullscreen="" width="5072" height="2853" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The question I keep asking myself is this: Why should anyone go out and buy one of these phones? And honestly, I'm really struggling to come up with a solid answer. People that are still rocking older Pixels, such as a <a href="https://www.tomsguide.com/reviews/google-pixel-6">Pixel 6</a> or <a href="https://www.tomsguide.com/reviews/google-pixel-7">Pixel 7</a>, would probably gain a lot here — especially if battery life is anything like the Pixel 10 series. </p><p><a href="https://www.tomsguide.com/reviews/google-pixel-8">Pixel 8</a> would be borderline, but <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Pixel 9</a> and above? These phones haven't actually changed that much over the past two generations to warrant upgrading. Your best argument would be for non-users, since the standard Pixel 9 only offers two cameras, but even then you have to ask whether the money you're spending is worth it.</p><p>Last year I admitted that swapping a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-review">Pixel 9 Pro</a> for a Pixel 10 Pro was a mistake, and the new phone <a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-using-the-pixel-10-pro-for-2-months-and-i-regret-the-upgrade">didn't offer enough to make the switch worthwhile</a>. The Pixel 11 Pro takes that to a whole new level, and I know for a fact that my Pixel 10 Pro is more than good enough to last me until the launch of the Pixel 12 Pro next year — and likely beyond that.</p><p>If Pixel phones are supposed to be the idealized version of what an Android phone can be, then Google seems to be doing a pretty shoddy job of it. And it could fix that problem by actually making a phone that elicits a response beyond "huh, ok then."</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/google-bamboozled-me-into-paying-for-google-photos-a-decade-ago-and-now-its-doing-something-similar-with-the-pixel-11-pro">Google bamboozled me into paying for Google Photos a decade ago — and now it’s doing something similar with the Pixel 11 Pro</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">I held the Pixel Tag and it does one critical thing that the AirTag doesn’t — here’s what it is</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">I tried the Pixel 11 Pro Fold and it's more 'Ultra' than Samsung's foldable (for $200 less)</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The Pixel 11's Tensor G6 chip isn't 2nm despite the rumors — opening the door for iPhone 18 Pro ]]></title>
                                                                                                <dc:content><![CDATA[ <p>There are two types of rumors in the run-up to device launches like the new <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11 </a>series. One kind of rumor includes annual claims that some feature will finally make its debut, like the constant claim that Apple will drop the current <a href="https://www.tomsguide.com/phones/iphones/forget-the-iphone-20-heres-whats-coming-after-the-four-edge-bending-display">Face ID for under-display tech</a>. </p><p>The other type is more specific to the device and tends to be correct, more often than not. However, sometimes they're wrong. </p><p>It was rumored that the new Tensor G6 silicon in the new Pixel 11 series would be made <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">using TSMC's 2nm process</a>, the first smartphone that would feature the more efficient CPU platform. This would have beat Apple to the punch, which typically gets the latest chip upgrades.</p><p>But it turns out that isn't true. </p><p>In an interview with the Chinese publication <a href="https://www.cna.com.tw/news/ait/202608130173.aspx" target="_blank">CNA</a>, Peng Yu-chun, a VP of Hardware at Google, revealed that the G6 was built using TSMC's 3nm process.</p><p>That means that either the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-rumors-everything-we-know-so-far">iPhone 18 Pro</a> series will likely be the <a href="https://www.tomsguide.com/phones/iphones/forget-iphone-18-pro-iphone-20-tipped-to-get-apples-biggest-screen-upgrade-ever">first smartphone to feature a 2nm chip</a>.</p><h2 id="what-does-tensor-g6-offer">What does Tensor G6 offer?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5760px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wb4zmhi35XjBKhqCCqy7he" name="generative-ai-tensor-core-gpus-llms-ai-software-and-tools-for-rtx-pcs-image.jpg" alt="Nvidia GPU" src="https://cdn.mos.cms.futurecdn.net/wb4zmhi35XjBKhqCCqy7he.jpg" mos="" align="middle" fullscreen="" width="5760" height="3240" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nvidia)</span></figcaption></figure><p>Despite not featuring the 2nm platform, Google claims the G6 has several upgrades. </p><p>That includes "25% faster web browsing, 15% quicker app launches" and 50% more TPU compute. It does feature an upgraded Titan M3 security chip, which <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">was previously rumored</a> and should make the phone more secure.</p><p>The chip also enables an upgrade Image Signal Processor to support the new Night Sight and a claimed upgraded digital zoom. </p><h2 id="a-worrying-weakness">A worrying weakness</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4774px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="cWDHVPLpAFP2aLGrin8Rzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/cWDHVPLpAFP2aLGrin8Rzf.jpg" mos="" align="middle" fullscreen="" width="4774" height="2685" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>There was some excitement about a 2nm process because it would have been able to feature more nodes and deliver efficiency and power upgrades. </p><p>Pixels have long lagged behind Apple and Samsung's flagship phones. Unfortunately, that may continue. Just before yesterday's Made by Google event, a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-xl-benchmarks-leak-and-tensor-g6-is-96-percent-slower-than-galaxy-s26-ultra">new Geekbench listing popped up</a> that revealed a weak CPU. That listing showed a multicore score of 5,196 and a single-core score of 2,112. It's 50% slower than the S26 Ultra.</p><p>At Tom's Guide, we run our own tests; we'll see if the listing is an outlier or not. But at first blush, things aren't looking good.</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/the-pixel-11-is-available-to-pre-order-but-you-probably-shouldnt-right-now-heres-why">The Pixel 11 is available to pre-order, but you probably shouldn't right now — here's why</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">After 10 years of Pixels, why is Google still making phones?</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">I checked out the Pixel 11, Pixel 11 Pro, and Pixel 11 Pro XL — here’s the one I recommend</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/the-pixel-11s-tensor-g6-chip-isnt-2nm-despite-the-rumors-opening-the-door-for-iphone-18-pro</link>
                                                                            <description>
                            <![CDATA[ Despite rumors, the new Pixel 11 series features a 3nm processor meaning its not as boosted as expected. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Cj4hrzE8civitvyt2Cux2n</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aChRJKhpsQjSMTLLLZpEDn-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 13 Aug 2026 22:09:52 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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;br&gt;Send secure tips on Signal: scyo1.55.&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/aChRJKhpsQjSMTLLLZpEDn-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 Pro hands-on.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 Pro hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 Pro hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aChRJKhpsQjSMTLLLZpEDn-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There are two types of rumors in the run-up to device launches like the new <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11 </a>series. One kind of rumor includes annual claims that some feature will finally make its debut, like the constant claim that Apple will drop the current <a href="https://www.tomsguide.com/phones/iphones/forget-the-iphone-20-heres-whats-coming-after-the-four-edge-bending-display">Face ID for under-display tech</a>. </p><p>The other type is more specific to the device and tends to be correct, more often than not. However, sometimes they're wrong. </p><p>It was rumored that the new Tensor G6 silicon in the new Pixel 11 series would be made <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">using TSMC's 2nm process</a>, the first smartphone that would feature the more efficient CPU platform. This would have beat Apple to the punch, which typically gets the latest chip upgrades.</p><p>But it turns out that isn't true. </p><p>In an interview with the Chinese publication <a href="https://www.cna.com.tw/news/ait/202608130173.aspx" target="_blank">CNA</a>, Peng Yu-chun, a VP of Hardware at Google, revealed that the G6 was built using TSMC's 3nm process.</p><p>That means that either the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-rumors-everything-we-know-so-far">iPhone 18 Pro</a> series will likely be the <a href="https://www.tomsguide.com/phones/iphones/forget-iphone-18-pro-iphone-20-tipped-to-get-apples-biggest-screen-upgrade-ever">first smartphone to feature a 2nm chip</a>.</p><h2 id="what-does-tensor-g6-offer">What does Tensor G6 offer?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5760px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wb4zmhi35XjBKhqCCqy7he" name="generative-ai-tensor-core-gpus-llms-ai-software-and-tools-for-rtx-pcs-image.jpg" alt="Nvidia GPU" src="https://cdn.mos.cms.futurecdn.net/wb4zmhi35XjBKhqCCqy7he.jpg" mos="" align="middle" fullscreen="" width="5760" height="3240" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nvidia)</span></figcaption></figure><p>Despite not featuring the 2nm platform, Google claims the G6 has several upgrades. </p><p>That includes "25% faster web browsing, 15% quicker app launches" and 50% more TPU compute. It does feature an upgraded Titan M3 security chip, which <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">was previously rumored</a> and should make the phone more secure.</p><p>The chip also enables an upgrade Image Signal Processor to support the new Night Sight and a claimed upgraded digital zoom. </p><h2 id="a-worrying-weakness">A worrying weakness</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4774px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="cWDHVPLpAFP2aLGrin8Rzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/cWDHVPLpAFP2aLGrin8Rzf.jpg" mos="" align="middle" fullscreen="" width="4774" height="2685" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>There was some excitement about a 2nm process because it would have been able to feature more nodes and deliver efficiency and power upgrades. </p><p>Pixels have long lagged behind Apple and Samsung's flagship phones. Unfortunately, that may continue. Just before yesterday's Made by Google event, a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-xl-benchmarks-leak-and-tensor-g6-is-96-percent-slower-than-galaxy-s26-ultra">new Geekbench listing popped up</a> that revealed a weak CPU. That listing showed a multicore score of 5,196 and a single-core score of 2,112. It's 50% slower than the S26 Ultra.</p><p>At Tom's Guide, we run our own tests; we'll see if the listing is an outlier or not. But at first blush, things aren't looking good.</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/the-pixel-11-is-available-to-pre-order-but-you-probably-shouldnt-right-now-heres-why">The Pixel 11 is available to pre-order, but you probably shouldn't right now — here's why</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">After 10 years of Pixels, why is Google still making phones?</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">I checked out the Pixel 11, Pixel 11 Pro, and Pixel 11 Pro XL — here’s the one I recommend</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've found the best Google Pixel 11 preorder deals — save up to $1,300 on any model ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google's 2026 phone lineup has officially been unveiled. At this week's Made by Google event, the search engine giant unveiled the new 6.3-inch Pixel 11 ($899), 6.3-inch Pixel 11 Pro ($1,099), 6.8-inch Pixel 11 Pro XL ($1,299), and Pixel 11 Pro Fold ($1,899). The latter sports a 6.5-inch cover display and 8-inch main display. </p><p>Pixel 11 preorder deals are now live with the phones officially releasing on August 20. In terms of deals, <a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">T-Mobile is offering the Pixel 11, Pixel 11 Pro, or Pixel 11 Pro XL for free</a> with select data plans and no trade-in required. It's one of the best Pixel 11 preorder deals I've seen from any carrier so far. </p><p>Meanwhile, <a href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow">Verizon has the Pixel 11 for free</a> with trade-in. As part of the deal, you'll also get NFL Sunday Ticket from YouTube for free. If it's freebies you're after, Best Buy is bundling up to a $350 eGift card with your Pixel 11 preorder when you purchase any of Google's new phones. </p><p>Below I've rounded up all of the best Pixel 11 preorder deals you can get at carriers and retailers alike.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free Pixel 11/Pixel 11 Pro/Pixel 11 Pro XL</strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow"><strong>Pixel 11 Pro w/ free Pixel Watch 5 + Tab S10 F 5G</strong></a></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/browse/google/?source=EOC621821156" target="_blank" rel="nofollow"><strong>free Pixel 11 Pro or Pixel 11 Pro XL w/ trade-in</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop?category=device&brand=google&page=1" target="_blank" rel="nofollow"><strong>free w/ trade-in</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><strong>up to $350 gift card</strong></a></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/stores/page/7BD63C98-E7D2-406E-A063-4DC485BD0AB3" target="_blank" rel="nofollow"><strong>up to $200 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-pixel-11"><span>Pixel 11</span></h3><div class="product"><a data-dimension112="5cb231be-9726-11f1-8198-733cb57ae211" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb231be-9726-11f1-8198-733cb57ae211" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 preorder deals it's offering. For example, you can get it for free with trade-in and an Experience Beyond or More plan. Or get up to $500 off with trade-in on most plans. The new phone features a 6.3-inch Actua Display OLED (2424 x 1080) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 48MP (f/1.7) main, 13MP (f/2.2) ultrawide, and 10.8MP (f/3.1) telephoto with 5x optical zoom. On the front there's a 10.5MP (f/2.2) lens. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb231be-9726-11f1-8198-733cb57ae211" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb230ce-9726-11f1-887c-b5ca65e4e7bd" data-action="Deal Block" data-label="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 preorder: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb230ce-9726-11f1-887c-b5ca65e4e7bd" data-action="Deal Block" data-label="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" data-dimension25=""><strong>free $100 gift card w/ preorder @ Best Buy</strong></a><br>Best Buy will bundle a free $100 Best Buy gift card with your Pixel 11 purchase. You can also get up to $700 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb230ce-9726-11f1-887c-b5ca65e4e7bd" data-action="Deal Block" data-label="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23146-9726-11f1-95f8-0f2bb94fb59f" data-action="Deal Block" data-label="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 preorder: </strong><a href="https://www.att.com/buy/phones/google-pixel-11.html" target="_blank" rel="nofollow" data-dimension112="5cb23146-9726-11f1-95f8-0f2bb94fb59f" data-action="Deal Block" data-label="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>$5/month w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 for $5.43/month when you buy it with any unlimited data plan. It features a 6.3-inch Actua Display OLED (2424 x 1080) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 48MP (f/1.7) main, 13MP (f/2.2) ultrawide, and 10.8MP (f/3.1) telephoto with 5x optical zoom. On the front there's a 10.5MP (f/2.2) lens. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11.html" target="_blank" rel="nofollow" data-dimension112="5cb23146-9726-11f1-95f8-0f2bb94fb59f" data-action="Deal Block" data-label="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23236-9726-11f1-b2f2-d1f924fb10fd" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 preorder: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23236-9726-11f1-b2f2-d1f924fb10fd" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>The Pixel 11 could be one of the best budget phones around. Trade-in an old phone and sign up for an eligible unlimited plan to get it for free at Verizon. Plus, you'll get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23236-9726-11f1-b2f2-d1f924fb10fd" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb232a4-9726-11f1-9415-87ab45e385a9" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 preorder: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow" data-dimension112="5cb232a4-9726-11f1-9415-87ab45e385a9" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 for free with trade-in. Don't have a trade-in? You can save up to $600 with a new line. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow" data-dimension112="5cb232a4-9726-11f1-9415-87ab45e385a9" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23312-9726-11f1-a7fc-999e12d62827" data-action="Deal Block" data-label="Pixel 11" data-dimension48="Pixel 11" data-dimension25="$899" href="https://www.amazon.com/dp/B0HBF7RD17" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:65.00%;"><img id="KS47xsRA6Nw9sHNzWrSNAH" name="Pixel 11 deal block Amazon" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KS47xsRA6Nw9sHNzWrSNAH.jpg" mos="" align="middle" fullscreen="" width="1500" height="975" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $100 Amazon gift card with your Pixel 11 preorder. This deal is valid through August 27 at 11:59pm (PT) or while supplies last. <a class="view-deal button" href="https://www.amazon.com/dp/B0HBF7RD17" target="_blank" rel="nofollow" data-dimension112="5cb23312-9726-11f1-a7fc-999e12d62827" data-action="Deal Block" data-label="Pixel 11" data-dimension48="Pixel 11" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="5cb2338a-9726-11f1-918d-85faf0f92288" data-action="Deal Block" data-label="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 pre-order: </strong><a href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb2338a-9726-11f1-918d-85faf0f92288" data-action="Deal Block" data-label="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" data-dimension25=""><strong>up to $500 off w/ trade-in @ Google</strong></a><br>Open an account at the Google Store and you can get up to $500 off your Pixel 11 preorder. Plus, you'll get $130 off the new Pixel Watch 5 or a $100 Google Store credit when you buy the unlocked Pixel 11. Shoppers will also get 3 months of YouTube Premium for free. <a class="view-deal button" href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb2338a-9726-11f1-918d-85faf0f92288" data-action="Deal Block" data-label="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-pixel-11-pro"><span>Pixel 11 Pro</span></h3><div class="product"><a data-dimension112="5cb23466-9726-11f1-82d3-d5b2b59836e2" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb23466-9726-11f1-82d3-d5b2b59836e2" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 Pro preorder deals it's offering. For example, you can get it for free with trade-in on Experience More or Experience Beyond plans. Or get $500 off with trade-in on most plans. It features a 6.3-inch Super Actua OLED display (1280 x 2856) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb23466-9726-11f1-82d3-d5b2b59836e2" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb234d4-9726-11f1-8386-4baac90021f2" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11-pro.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro preorder: </strong><a href="https://www.att.com/buy/phones/google-pixel-11-pro.html" target="_blank" rel="nofollow" data-dimension112="5cb234d4-9726-11f1-8386-4baac90021f2" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>free w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 Pro for free with trade-in and an eligible unlimited data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11-pro.html" target="_blank" rel="nofollow" data-dimension112="5cb234d4-9726-11f1-8386-4baac90021f2" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb2354c-9726-11f1-b8d6-399985dac328" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro preorder: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb2354c-9726-11f1-b8d6-399985dac328" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension25=""><strong>free $200 gift card w/ preorder @ Best Buy</strong></a><br>Best Buy will bundle a free $200 Best Buy gift card with your Pixel 11 Pro purchase. You can also get up to $1,000 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb2354c-9726-11f1-b8d6-399985dac328" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb235ba-9726-11f1-9da5-031a62f76821" data-action="Deal Block" data-label="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro preorder: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow" data-dimension112="5cb235ba-9726-11f1-9da5-031a62f76821" data-action="Deal Block" data-label="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>$45/month w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is offering the Pixel 11 Pro for $45/month with trade-in and eligible unlimited data plans. Plus, you can get a free Pixel Watch 5 and Galaxy Tab S10 FE 5G. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow" data-dimension112="5cb235ba-9726-11f1-9da5-031a62f76821" data-action="Deal Block" data-label="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23628-9726-11f1-b753-9dec5507dec5" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro preorder: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="5cb23628-9726-11f1-b753-9dec5507dec5" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro for free with trade-in. Or get $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="5cb23628-9726-11f1-b753-9dec5507dec5" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb236a0-9726-11f1-b5b2-ffb74b028b53" data-action="Deal Block" data-label="Pixel 11 Pro" data-dimension48="Pixel 11 Pro" data-dimension25="$1099" href="https://www.amazon.com/Google-Pixel-11-Pro-Canyon/dp/B0HBFR8NVY" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:65.33%;"><img id="C2Q2VbZ7JQHQhvS3f4kyoj" name="Pixel 11 Pro deal block Amazon" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/C2Q2VbZ7JQHQhvS3f4kyoj.jpg" mos="" align="middle" fullscreen="" width="1500" height="980" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $200 Amazon gift card with your Pixel 11 Pro preorder. This deal is valid through August 27 at 11:59pm (PT) or while supplies last. <a class="view-deal button" href="https://www.amazon.com/Google-Pixel-11-Pro-Canyon/dp/B0HBFR8NVY" target="_blank" rel="nofollow" data-dimension112="5cb236a0-9726-11f1-b5b2-ffb74b028b53" data-action="Deal Block" data-label="Pixel 11 Pro" data-dimension48="Pixel 11 Pro" data-dimension25="$1099">View Deal</a></p></div><div class="product"><a data-dimension112="5cb2370e-9726-11f1-a83a-afe56ef3eff5" data-action="Deal Block" data-label="Google Pixel 10 Pro pre-order: $999 @ Google" data-dimension48="Google Pixel 10 Pro pre-order: $999 @ Google" href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 10 Pro pre-order: </strong><a href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb2370e-9726-11f1-a83a-afe56ef3eff5" data-action="Deal Block" data-label="Google Pixel 10 Pro pre-order: $999 @ Google" data-dimension48="Google Pixel 10 Pro pre-order: $999 @ Google" data-dimension25=""><strong>$999 @ Google</strong><br></a><br>Open an account at the Google Store and you can get the Pixel 10 Pro for $999 for the unlocked version of the phone. Or get up to $760 off with select trade-ins. <a class="view-deal button" href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb2370e-9726-11f1-a83a-afe56ef3eff5" data-action="Deal Block" data-label="Google Pixel 10 Pro pre-order: $999 @ Google" data-dimension48="Google Pixel 10 Pro pre-order: $999 @ Google" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-pixel-11-pro-xl"><span>Pixel 11 Pro XL</span></h3><div class="product"><a data-dimension112="5cb237f4-9726-11f1-af30-4396bd0a0c05" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb237f4-9726-11f1-af30-4396bd0a0c05" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 Pro XL preorder deals it's offering. For example, you can get get it for free on an Experience Beyond plan with trade-in or up to $1,100 off with trade-in on an Experience More plan. Or get up to $500 off with trade-in on most plans. It features a 6.8-inch Super Actua OLED display (1344 x 2992) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens.<a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb237f4-9726-11f1-af30-4396bd0a0c05" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23862-9726-11f1-94fe-d7d36cd16d75" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL preorder: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23862-9726-11f1-94fe-d7d36cd16d75" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is offering the Pixel 11 Pro XL for free with trade-in and eligible unlimited data plans. Plus, you'll get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23862-9726-11f1-94fe-d7d36cd16d75" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb238d0-9726-11f1-93c9-b33014669b50" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL preorder: </strong><a href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.html" target="_blank" rel="nofollow" data-dimension112="5cb238d0-9726-11f1-93c9-b33014669b50" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>free w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 Pro XL for free with trade-in and an eligible unlimited data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.html" target="_blank" rel="nofollow" data-dimension112="5cb238d0-9726-11f1-93c9-b33014669b50" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23948-9726-11f1-b9f2-435a20126058" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL preorder: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb23948-9726-11f1-b9f2-435a20126058" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension25=""><strong>free $200 gift card w/ preorder @ Best Buy</strong></a><br>Best Buy will bundle a free $200 Best Buy gift card with your Pixel 11 Pro XL purchase. You can also get up to $1,000 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb23948-9726-11f1-b9f2-435a20126058" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb239b6-9726-11f1-a112-e5587d141d11" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL preorder: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="5cb239b6-9726-11f1-a112-e5587d141d11" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro XL for free with trade-in. Or get up to $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="5cb239b6-9726-11f1-a112-e5587d141d11" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23a2e-9726-11f1-b5ff-cde41805b6a0" data-action="Deal Block" data-label="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" data-dimension48="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 10 Pro XL pre-order: </strong><a href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb23a2e-9726-11f1-b5ff-cde41805b6a0" data-action="Deal Block" data-label="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" data-dimension48="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" data-dimension25=""><strong>$1,199 @ Google</strong><br></a><br>Open an account at the Google Store and you can get the Pixel 10 Pro XL for $1,199 for the unlocked version of the phone. Or get up to $760 off with select trade-ins. <a class="view-deal button" href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb23a2e-9726-11f1-b5ff-cde41805b6a0" data-action="Deal Block" data-label="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" data-dimension48="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-pixel-11-pro-fold"><span>Pixel 11 Pro Fold</span></h3><div class="product"><a data-dimension112="5cb23b0a-9726-11f1-9e82-c7539d223fb6" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro Fold preorder: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb23b0a-9726-11f1-9e82-c7539d223fb6" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" data-dimension25=""><strong>free $350 gift card w/ preorder @ Best Buy</strong></a><br>Best Buy will bundle a free $350 Best Buy gift card with your Pixel 11 Pro Fold purchase. You can also get up to $1,000 off with a trade-in. It features a 6.5-inch Super Actua OLED (1080 x 2342) 120Hz cover display and an 8-inch Super Actua OLED (2076 x 2152) 120Hz main display. Powering the phone is the new Tensor G6 chipset coupled with 12GB of RAM and 256GB of storage. Rear cameras include a 48MP (f/1.7) wide, 10.5MP (f/2.2) ultrawide with Macro Focus, and a 10.8MP (f/3.1) 5x telephoto lens. On the front there's a 10MP inner and cover camera. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold hands-on</a>, we said it's a much improved foldable phone. It’s lighter, thinner, tougher, and faster than its predecessor. Plus, it has a longer zoom than the Z Fold 8 Ultra.<a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb23b0a-9726-11f1-9e82-c7539d223fb6" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23b78-9726-11f1-a4a2-5f7e28adfe1f" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro Fold preorder: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23b78-9726-11f1-a4a2-5f7e28adfe1f" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is taking up to $1,000 off the Pixel 11 Pro Fold with trade-in and new line. (You must also opt for Verizon's Unlimited Ultimate data plan). You'll also get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23b78-9726-11f1-a4a2-5f7e28adfe1f" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="f6b3eff2-975b-11f1-ae06-2529257096b5" data-action="Deal Block" data-label="Pixel 11 Pro Fold" data-dimension48="Pixel 11 Pro Fold" data-dimension25="$1899" href="https://www.amazon.com/dp/B0HCRVD7VP" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:84.67%;"><img id="TVW9bK4fyf6XDagYQFJcbd" name="Pixel 11 Pro Fold deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TVW9bK4fyf6XDagYQFJcbd.jpg" mos="" align="middle" fullscreen="" width="1500" height="1270" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $350 Amazon gift card with your Pixel 11 Pro Fold preorder. This deal is valid through August 27 at 11:59pm (PT) or while supplies last. <a class="view-deal button" href="https://www.amazon.com/dp/B0HCRVD7VP" target="_blank" rel="nofollow" data-dimension112="f6b3eff2-975b-11f1-ae06-2529257096b5" data-action="Deal Block" data-label="Pixel 11 Pro Fold" data-dimension48="Pixel 11 Pro Fold" data-dimension25="$1899">View Deal</a></p></div><div class="product"><a data-dimension112="f6b3f182-975b-11f1-b496-5d27b6cd9438" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro Fold preorder: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow" data-dimension112="f6b3f182-975b-11f1-b496-5d27b6cd9438" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>$16/month w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro Fold for $16.63/month with trade-in. Or get up to $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow" data-dimension112="f6b3f182-975b-11f1-b496-5d27b6cd9438" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23be6-9726-11f1-9a4c-d9ce8bf93a15" data-action="Deal Block" data-label="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" data-dimension48="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" href="https://store.google.com/product/pixel_10_pro_fold" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 10 Pro Fold pre-order: </strong><a href="https://store.google.com/product/pixel_10_pro_fold" target="_blank" rel="nofollow" data-dimension112="5cb23be6-9726-11f1-9a4c-d9ce8bf93a15" data-action="Deal Block" data-label="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" data-dimension48="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" data-dimension25=""><strong>$1,799 @ Google</strong><br></a><br>Open an account at the Google Store and you can get the Pixel 10 Pro Fold for $1,799 for the unlocked version of the phone. Or get up to $760 off with select trade-ins. <a class="view-deal button" href="https://store.google.com/product/pixel_10_pro_fold" target="_blank" rel="nofollow" data-dimension112="5cb23be6-9726-11f1-9a4c-d9ce8bf93a15" data-action="Deal Block" data-label="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" data-dimension48="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" data-dimension25="">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/ive-found-the-best-google-pixel-11-preorder-deals-save-up-to-usd1-300-on-any-model</link>
                                                                            <description>
                            <![CDATA[ Google Pixel 11 preorders are live and I've rounded up the best deals you can get at T-Mobile, Best Buy, and more. Here's where you'll save the most. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">fepaHTswfz7DM3sGkmhDWJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/74sMJLmt2Pez5R6S34fgrm-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 13 Aug 2026 21:29:03 +0000</pubDate>                                                                                                                                <updated>Fri, 14 Aug 2026 13:27:57 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more. He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac. &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&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/74sMJLmt2Pez5R6S34fgrm-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google&#039;s Pixel 11 phones shown face down]]></media:description>                                                            <media:text><![CDATA[Google&#039;s Pixel 11 phones shown face down]]></media:text>
                                <media:title type="plain"><![CDATA[Google&#039;s Pixel 11 phones shown face down]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/74sMJLmt2Pez5R6S34fgrm-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google's 2026 phone lineup has officially been unveiled. At this week's Made by Google event, the search engine giant unveiled the new 6.3-inch Pixel 11 ($899), 6.3-inch Pixel 11 Pro ($1,099), 6.8-inch Pixel 11 Pro XL ($1,299), and Pixel 11 Pro Fold ($1,899). The latter sports a 6.5-inch cover display and 8-inch main display. </p><p>Pixel 11 preorder deals are now live with the phones officially releasing on August 20. In terms of deals, <a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">T-Mobile is offering the Pixel 11, Pixel 11 Pro, or Pixel 11 Pro XL for free</a> with select data plans and no trade-in required. It's one of the best Pixel 11 preorder deals I've seen from any carrier so far. </p><p>Meanwhile, <a href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow">Verizon has the Pixel 11 for free</a> with trade-in. As part of the deal, you'll also get NFL Sunday Ticket from YouTube for free. If it's freebies you're after, Best Buy is bundling up to a $350 eGift card with your Pixel 11 preorder when you purchase any of Google's new phones. </p><p>Below I've rounded up all of the best Pixel 11 preorder deals you can get at carriers and retailers alike.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free Pixel 11/Pixel 11 Pro/Pixel 11 Pro XL</strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow"><strong>Pixel 11 Pro w/ free Pixel Watch 5 + Tab S10 F 5G</strong></a></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/browse/google/?source=EOC621821156" target="_blank" rel="nofollow"><strong>free Pixel 11 Pro or Pixel 11 Pro XL w/ trade-in</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop?category=device&brand=google&page=1" target="_blank" rel="nofollow"><strong>free w/ trade-in</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><strong>up to $350 gift card</strong></a></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/stores/page/7BD63C98-E7D2-406E-A063-4DC485BD0AB3" target="_blank" rel="nofollow"><strong>up to $200 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-pixel-11"><span>Pixel 11</span></h3><div class="product"><a data-dimension112="5cb231be-9726-11f1-8198-733cb57ae211" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb231be-9726-11f1-8198-733cb57ae211" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 preorder deals it's offering. For example, you can get it for free with trade-in and an Experience Beyond or More plan. Or get up to $500 off with trade-in on most plans. The new phone features a 6.3-inch Actua Display OLED (2424 x 1080) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 48MP (f/1.7) main, 13MP (f/2.2) ultrawide, and 10.8MP (f/3.1) telephoto with 5x optical zoom. On the front there's a 10.5MP (f/2.2) lens. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb231be-9726-11f1-8198-733cb57ae211" data-action="Deal Block" data-label="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb230ce-9726-11f1-887c-b5ca65e4e7bd" data-action="Deal Block" data-label="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 preorder: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb230ce-9726-11f1-887c-b5ca65e4e7bd" data-action="Deal Block" data-label="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" data-dimension25=""><strong>free $100 gift card w/ preorder @ Best Buy</strong></a><br>Best Buy will bundle a free $100 Best Buy gift card with your Pixel 11 purchase. You can also get up to $700 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb230ce-9726-11f1-887c-b5ca65e4e7bd" data-action="Deal Block" data-label="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 preorder: free $100 gift card w/ preorder @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23146-9726-11f1-95f8-0f2bb94fb59f" data-action="Deal Block" data-label="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 preorder: </strong><a href="https://www.att.com/buy/phones/google-pixel-11.html" target="_blank" rel="nofollow" data-dimension112="5cb23146-9726-11f1-95f8-0f2bb94fb59f" data-action="Deal Block" data-label="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>$5/month w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 for $5.43/month when you buy it with any unlimited data plan. It features a 6.3-inch Actua Display OLED (2424 x 1080) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 48MP (f/1.7) main, 13MP (f/2.2) ultrawide, and 10.8MP (f/3.1) telephoto with 5x optical zoom. On the front there's a 10.5MP (f/2.2) lens. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11.html" target="_blank" rel="nofollow" data-dimension112="5cb23146-9726-11f1-95f8-0f2bb94fb59f" data-action="Deal Block" data-label="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 preorder: $5/month w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23236-9726-11f1-b2f2-d1f924fb10fd" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 preorder: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23236-9726-11f1-b2f2-d1f924fb10fd" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>The Pixel 11 could be one of the best budget phones around. Trade-in an old phone and sign up for an eligible unlimited plan to get it for free at Verizon. Plus, you'll get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23236-9726-11f1-b2f2-d1f924fb10fd" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb232a4-9726-11f1-9415-87ab45e385a9" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 preorder: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow" data-dimension112="5cb232a4-9726-11f1-9415-87ab45e385a9" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 for free with trade-in. Don't have a trade-in? You can save up to $600 with a new line. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11?colorName=Frost" target="_blank" rel="nofollow" data-dimension112="5cb232a4-9726-11f1-9415-87ab45e385a9" data-action="Deal Block" data-label="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23312-9726-11f1-a7fc-999e12d62827" data-action="Deal Block" data-label="Pixel 11" data-dimension48="Pixel 11" data-dimension25="$899" href="https://www.amazon.com/dp/B0HBF7RD17" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:65.00%;"><img id="KS47xsRA6Nw9sHNzWrSNAH" name="Pixel 11 deal block Amazon" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KS47xsRA6Nw9sHNzWrSNAH.jpg" mos="" align="middle" fullscreen="" width="1500" height="975" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $100 Amazon gift card with your Pixel 11 preorder. This deal is valid through August 27 at 11:59pm (PT) or while supplies last. <a class="view-deal button" href="https://www.amazon.com/dp/B0HBF7RD17" target="_blank" rel="nofollow" data-dimension112="5cb23312-9726-11f1-a7fc-999e12d62827" data-action="Deal Block" data-label="Pixel 11" data-dimension48="Pixel 11" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="5cb2338a-9726-11f1-918d-85faf0f92288" data-action="Deal Block" data-label="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 pre-order: </strong><a href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb2338a-9726-11f1-918d-85faf0f92288" data-action="Deal Block" data-label="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" data-dimension25=""><strong>up to $500 off w/ trade-in @ Google</strong></a><br>Open an account at the Google Store and you can get up to $500 off your Pixel 11 preorder. Plus, you'll get $130 off the new Pixel Watch 5 or a $100 Google Store credit when you buy the unlocked Pixel 11. Shoppers will also get 3 months of YouTube Premium for free. <a class="view-deal button" href="https://store.google.com/product/pixel_11?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb2338a-9726-11f1-918d-85faf0f92288" data-action="Deal Block" data-label="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" data-dimension48="Google Pixel 11 pre-order: up to $500 off w/ trade-in @ Google" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-pixel-11-pro"><span>Pixel 11 Pro</span></h3><div class="product"><a data-dimension112="5cb23466-9726-11f1-82d3-d5b2b59836e2" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb23466-9726-11f1-82d3-d5b2b59836e2" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 Pro preorder deals it's offering. For example, you can get it for free with trade-in on Experience More or Experience Beyond plans. Or get $500 off with trade-in on most plans. It features a 6.3-inch Super Actua OLED display (1280 x 2856) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb23466-9726-11f1-82d3-d5b2b59836e2" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb234d4-9726-11f1-8386-4baac90021f2" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11-pro.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro preorder: </strong><a href="https://www.att.com/buy/phones/google-pixel-11-pro.html" target="_blank" rel="nofollow" data-dimension112="5cb234d4-9726-11f1-8386-4baac90021f2" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>free w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 Pro for free with trade-in and an eligible unlimited data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11-pro.html" target="_blank" rel="nofollow" data-dimension112="5cb234d4-9726-11f1-8386-4baac90021f2" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb2354c-9726-11f1-b8d6-399985dac328" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro preorder: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb2354c-9726-11f1-b8d6-399985dac328" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension25=""><strong>free $200 gift card w/ preorder @ Best Buy</strong></a><br>Best Buy will bundle a free $200 Best Buy gift card with your Pixel 11 Pro purchase. You can also get up to $1,000 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb2354c-9726-11f1-b8d6-399985dac328" data-action="Deal Block" data-label="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb235ba-9726-11f1-9da5-031a62f76821" data-action="Deal Block" data-label="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro preorder: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow" data-dimension112="5cb235ba-9726-11f1-9da5-031a62f76821" data-action="Deal Block" data-label="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>$45/month w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is offering the Pixel 11 Pro for $45/month with trade-in and eligible unlimited data plans. Plus, you can get a free Pixel Watch 5 and Galaxy Tab S10 FE 5G. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro/?allinpdp=true&contractTerm=48&isMyPlanFlow=false" target="_blank" rel="nofollow" data-dimension112="5cb235ba-9726-11f1-9da5-031a62f76821" data-action="Deal Block" data-label="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro preorder: $45/month w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23628-9726-11f1-b753-9dec5507dec5" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro preorder: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="5cb23628-9726-11f1-b753-9dec5507dec5" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro for free with trade-in. Or get $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="5cb23628-9726-11f1-b753-9dec5507dec5" data-action="Deal Block" data-label="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb236a0-9726-11f1-b5b2-ffb74b028b53" data-action="Deal Block" data-label="Pixel 11 Pro" data-dimension48="Pixel 11 Pro" data-dimension25="$1099" href="https://www.amazon.com/Google-Pixel-11-Pro-Canyon/dp/B0HBFR8NVY" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:65.33%;"><img id="C2Q2VbZ7JQHQhvS3f4kyoj" name="Pixel 11 Pro deal block Amazon" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/C2Q2VbZ7JQHQhvS3f4kyoj.jpg" mos="" align="middle" fullscreen="" width="1500" height="980" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $200 Amazon gift card with your Pixel 11 Pro preorder. This deal is valid through August 27 at 11:59pm (PT) or while supplies last. <a class="view-deal button" href="https://www.amazon.com/Google-Pixel-11-Pro-Canyon/dp/B0HBFR8NVY" target="_blank" rel="nofollow" data-dimension112="5cb236a0-9726-11f1-b5b2-ffb74b028b53" data-action="Deal Block" data-label="Pixel 11 Pro" data-dimension48="Pixel 11 Pro" data-dimension25="$1099">View Deal</a></p></div><div class="product"><a data-dimension112="5cb2370e-9726-11f1-a83a-afe56ef3eff5" data-action="Deal Block" data-label="Google Pixel 10 Pro pre-order: $999 @ Google" data-dimension48="Google Pixel 10 Pro pre-order: $999 @ Google" href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 10 Pro pre-order: </strong><a href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb2370e-9726-11f1-a83a-afe56ef3eff5" data-action="Deal Block" data-label="Google Pixel 10 Pro pre-order: $999 @ Google" data-dimension48="Google Pixel 10 Pro pre-order: $999 @ Google" data-dimension25=""><strong>$999 @ Google</strong><br></a><br>Open an account at the Google Store and you can get the Pixel 10 Pro for $999 for the unlocked version of the phone. Or get up to $760 off with select trade-ins. <a class="view-deal button" href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb2370e-9726-11f1-a83a-afe56ef3eff5" data-action="Deal Block" data-label="Google Pixel 10 Pro pre-order: $999 @ Google" data-dimension48="Google Pixel 10 Pro pre-order: $999 @ Google" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-pixel-11-pro-xl"><span>Pixel 11 Pro XL</span></h3><div class="product"><a data-dimension112="5cb237f4-9726-11f1-af30-4396bd0a0c05" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EJ7tTszzvBLLXHfzDXGMtX" name="tmobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJ7tTszzvBLLXHfzDXGMtX.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb237f4-9726-11f1-af30-4396bd0a0c05" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ new line + unlimited @ T-Mobile</strong></a><br>T-Mobile has a few Pixel 11 Pro XL preorder deals it's offering. For example, you can get get it for free on an Experience Beyond plan with trade-in or up to $1,100 off with trade-in on an Experience More plan. Or get up to $500 off with trade-in on most plans. It features a 6.8-inch Super Actua OLED display (1344 x 2992) 120Hz display, Tensor G6 chipset, 12GB of RAM, and 256GB of storage. Rear cameras include a 50MP (f/1.68) main, 48MP (f/1.7) ultrawide, and a 48MP (f/2.8) 5x telephoto. On the front there's a 42MP (f/2.2) lens.<a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4007030/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="5cb237f4-9726-11f1-af30-4396bd0a0c05" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension48="Google Pixel 11 Pro XL preorder: free w/ new line + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23862-9726-11f1-94fe-d7d36cd16d75" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL preorder: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23862-9726-11f1-94fe-d7d36cd16d75" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is offering the Pixel 11 Pro XL for free with trade-in and eligible unlimited data plans. Plus, you'll get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro-xl/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23862-9726-11f1-94fe-d7d36cd16d75" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb238d0-9726-11f1-93c9-b33014669b50" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$" href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.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="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL preorder: </strong><a href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.html" target="_blank" rel="nofollow" data-dimension112="5cb238d0-9726-11f1-93c9-b33014669b50" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$"><strong>free w/ unlimited @ AT&T</strong></a><br>AT&T is offering the Pixel 11 Pro XL for free with trade-in and an eligible unlimited data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/google-pixel-11-pro-xl.html" target="_blank" rel="nofollow" data-dimension112="5cb238d0-9726-11f1-93c9-b33014669b50" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension48="Pixel 11 Pro XL preorder: free w/ unlimited @ AT&amp;T" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23948-9726-11f1-b9f2-435a20126058" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro XL preorder: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb23948-9726-11f1-b9f2-435a20126058" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension25=""><strong>free $200 gift card w/ preorder @ Best Buy</strong></a><br>Best Buy will bundle a free $200 Best Buy gift card with your Pixel 11 Pro XL purchase. You can also get up to $1,000 off with a trade-in. <a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb23948-9726-11f1-b9f2-435a20126058" data-action="Deal Block" data-label="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro XL preorder: free $200 gift card w/ preorder @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb239b6-9726-11f1-a112-e5587d141d11" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro XL preorder: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="5cb239b6-9726-11f1-a112-e5587d141d11" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>free w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro XL for free with trade-in. Or get up to $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-xl?colorName=Canyon" target="_blank" rel="nofollow" data-dimension112="5cb239b6-9726-11f1-a112-e5587d141d11" data-action="Deal Block" data-label="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro XL preorder: free w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23a2e-9726-11f1-b5ff-cde41805b6a0" data-action="Deal Block" data-label="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" data-dimension48="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 10 Pro XL pre-order: </strong><a href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb23a2e-9726-11f1-b5ff-cde41805b6a0" data-action="Deal Block" data-label="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" data-dimension48="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" data-dimension25=""><strong>$1,199 @ Google</strong><br></a><br>Open an account at the Google Store and you can get the Pixel 10 Pro XL for $1,199 for the unlocked version of the phone. Or get up to $760 off with select trade-ins. <a class="view-deal button" href="https://store.google.com/product/pixel_10_pro?hl=en-US" target="_blank" rel="nofollow" data-dimension112="5cb23a2e-9726-11f1-b5ff-cde41805b6a0" data-action="Deal Block" data-label="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" data-dimension48="Google Pixel 10 Pro XL pre-order: $1,199 @ Google" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-pixel-11-pro-fold"><span>Pixel 11 Pro Fold</span></h3><div class="product"><a data-dimension112="5cb23b0a-9726-11f1-9e82-c7539d223fb6" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 11 Pro Fold preorder: </strong><a href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb23b0a-9726-11f1-9e82-c7539d223fb6" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" data-dimension25=""><strong>free $350 gift card w/ preorder @ Best Buy</strong></a><br>Best Buy will bundle a free $350 Best Buy gift card with your Pixel 11 Pro Fold purchase. You can also get up to $1,000 off with a trade-in. It features a 6.5-inch Super Actua OLED (1080 x 2342) 120Hz cover display and an 8-inch Super Actua OLED (2076 x 2152) 120Hz main display. Powering the phone is the new Tensor G6 chipset coupled with 12GB of RAM and 256GB of storage. Rear cameras include a 48MP (f/1.7) wide, 10.5MP (f/2.2) ultrawide with Macro Focus, and a 10.8MP (f/3.1) 5x telephoto lens. On the front there's a 10MP inner and cover camera. In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold hands-on</a>, we said it's a much improved foldable phone. It’s lighter, thinner, tougher, and faster than its predecessor. Plus, it has a longer zoom than the Z Fold 8 Ultra.<a class="view-deal button" href="https://www.bestbuy.com/site/promo/google-pixel-11-series-offer" target="_blank" rel="nofollow" data-dimension112="5cb23b0a-9726-11f1-9e82-c7539d223fb6" data-action="Deal Block" data-label="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" data-dimension48="Google Pixel 11 Pro Fold preorder: free $350 gift card w/ preorder @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23b78-9726-11f1-a4a2-5f7e28adfe1f" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$" href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro Fold preorder: </strong><a href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23b78-9726-11f1-a4a2-5f7e28adfe1f" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$"><strong>free w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is taking up to $1,000 off the Pixel 11 Pro Fold with trade-in and new line. (You must also opt for Verizon's Unlimited Ultimate data plan). You'll also get NFL Sunday Ticket from YouTube for free. <a class="view-deal button" href="https://www.verizon.com/smartphones/google-pixel-11-pro-fold/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="5cb23b78-9726-11f1-a4a2-5f7e28adfe1f" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension48="Pixel 11 Pro Fold preorder: free w/ trade-in + unlimited @ Verizon" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="f6b3eff2-975b-11f1-ae06-2529257096b5" data-action="Deal Block" data-label="Pixel 11 Pro Fold" data-dimension48="Pixel 11 Pro Fold" data-dimension25="$1899" href="https://www.amazon.com/dp/B0HCRVD7VP" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:84.67%;"><img id="TVW9bK4fyf6XDagYQFJcbd" name="Pixel 11 Pro Fold deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TVW9bK4fyf6XDagYQFJcbd.jpg" mos="" align="middle" fullscreen="" width="1500" height="1270" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a $350 Amazon gift card with your Pixel 11 Pro Fold preorder. This deal is valid through August 27 at 11:59pm (PT) or while supplies last. <a class="view-deal button" href="https://www.amazon.com/dp/B0HCRVD7VP" target="_blank" rel="nofollow" data-dimension112="f6b3eff2-975b-11f1-ae06-2529257096b5" data-action="Deal Block" data-label="Pixel 11 Pro Fold" data-dimension48="Pixel 11 Pro Fold" data-dimension25="$1899">View Deal</a></p></div><div class="product"><a data-dimension112="f6b3f182-975b-11f1-b496-5d27b6cd9438" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Pixel 11 Pro Fold preorder: </strong><a href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow" data-dimension112="f6b3f182-975b-11f1-b496-5d27b6cd9438" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>$16/month w/ trade-in @ Xfinity Mobile</strong></a><br>New Xfinity Mobile customers can get the Pixel 11 Pro Fold for $16.63/month with trade-in. Or get up to $600 off with no trade-in. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/pixel-11-pro-fold?colorName=Olive" target="_blank" rel="nofollow" data-dimension112="f6b3f182-975b-11f1-b496-5d27b6cd9438" data-action="Deal Block" data-label="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" data-dimension48="Pixel 11 Pro Fold preorder: $16/month w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5cb23be6-9726-11f1-9a4c-d9ce8bf93a15" data-action="Deal Block" data-label="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" data-dimension48="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" href="https://store.google.com/product/pixel_10_pro_fold" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vYEJJW6SNK8Q7KNNg49pZP" name="Google-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vYEJJW6SNK8Q7KNNg49pZP.jpg" mos="" align="middle" fullscreen="" width="1024" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Google Pixel 10 Pro Fold pre-order: </strong><a href="https://store.google.com/product/pixel_10_pro_fold" target="_blank" rel="nofollow" data-dimension112="5cb23be6-9726-11f1-9a4c-d9ce8bf93a15" data-action="Deal Block" data-label="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" data-dimension48="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" data-dimension25=""><strong>$1,799 @ Google</strong><br></a><br>Open an account at the Google Store and you can get the Pixel 10 Pro Fold for $1,799 for the unlocked version of the phone. Or get up to $760 off with select trade-ins. <a class="view-deal button" href="https://store.google.com/product/pixel_10_pro_fold" target="_blank" rel="nofollow" data-dimension112="5cb23be6-9726-11f1-9a4c-d9ce8bf93a15" data-action="Deal Block" data-label="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" data-dimension48="Google Pixel 10 Pro Fold pre-order: $1,799 @ Google" data-dimension25="">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The Pixel 11 is available to pre-order, but you probably shouldn't right now — here's why ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google has officially revealed the Pixel 11 series, and pre-orders are now open ahead of an official release date of August 20. The four new phones don't offer amazing upgrades compared to the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series, but there's enough that some of you are probably prepping to pre-order this phone as soon as you can. I'm here to tell you why you shouldn't do that.</p><p>The thing about Pixel phones is that they're like video games. You could buy them as soon as they're released, and pay full price to experience them right away, but you're just spending money that could be better used for other things. And it all comes down to the fact Pixel phones are essentially the mattresses of the smartphone world. </p><p>Considering how often, and how quickly the newest Pixel phones go on sale, paying full price is essentially agreeing to be ripped off.</p><h2 id="pixel-discounts-happen-regularly-and-quickly">Pixel discounts happen regularly, and quickly</h2><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="sSYrLScYBnAxaEKZuabVC" name="Google Pixel 11 Pro hands-on" alt="Google Pixel 11 Pro hands-on." src="https://cdn.mos.cms.futurecdn.net/sSYrLScYBnAxaEKZuabVC.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Imagine you're looking at a new phone that's just been released. The $900 price tag is a little expensive for your tastes, but you know that waiting for a major discount is a fool's errand. Maybe you'll be able to save a bit of money during the next sales event, like Black Friday or Prime Day, but there's never any guarantee that it'll actually happen — or how much money you might save.</p><p>For the last few years I've noticed that this isn't the case with Pixel phones. In fact, sometimes the discounts can start coming within a few weeks of the phone actually going on sale. If you're willing to wait for the Fall Prime Day sale, or the Black Friday season, you could be looking at a pretty hefty discount.</p><p>Admittedly I am making an assumption about what the future holds for the Pixel 11 series. I don't have a crystal ball or magic powers that let me see into the future. But <a href="https://www.tomsguide.com/phones/google-pixel-phones/im-buying-a-pixel-9-pro-but-plan-to-wait-heres-why">this is not the first time I've noticed this trend</a>, and I would be very surprised if the Pixel 11 broke rank.</p><h2 id="pixel-10-discounts-we-spotted-last-year">Pixel 10 discounts we spotted last year</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="V8JEkeQQF6dhQEXUDzajk6" name="Google Pixel 10 hands-on" alt="Google Pixel 10 hands-on." src="https://cdn.mos.cms.futurecdn.net/V8JEkeQQF6dhQEXUDzajk6.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>The first Pixel 10 discount we spotted was at the start of September 2025, during <a href="https://www.tomsguide.com/sales-events/amazons-labor-day-sale-is-massive-but-these-are-the-only-deals-id-shop">Amazon's Labor Day sales</a>. The phone didn't get any discounts, per se, but buying one did net you a <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-just-arrived-and-its-already-in-amazons-labor-day-sale-get-a-usd200-gift-card-when-you-buy">free $200 Amazon gift</a> card. While it's not the same as cold-hard cash, Amazon's ubiquity means that this is almost as good as getting $200 off your total.</p><p>I should mention at this point that the Pixel 10 was released on August 28, with pre-orders opening eight days earlier on August 20. This means the first Pixel 10 retailer deal happened just four days after release day.</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:1046px;"><p class="vanilla-image-block" style="padding-top:57.93%;"><img id="yDrUHE4QzJn2CkJ5uqXkfC" name="Screenshot 2026-08-13 125239" alt="camelcamelcamel price history for pixel smartphones" src="https://cdn.mos.cms.futurecdn.net/yDrUHE4QzJn2CkJ5uqXkfC.png" mos="" align="middle" fullscreen="" width="1046" height="606" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Pixel 10 price history </span><span class="credit" itemprop="copyrightHolder">(Image credit: CamelCamelCamel)</span></figcaption></figure><p>The first <a href="https://camelcamelcamel.com/product/B0FFTV1LXZ?context=search" target="_blank" rel="nofollow">actual discount</a> happened in early October, during Amazon's fall Prime Day, with the $799 price tag <a href="https://www.tomsguide.com/phones/11-incredible-prime-day-phone-deals-live-save-big-on-samsung-google-motorola-and-more">dropping to $649</a>. That's just on Amazon too, and further price drops did happen elsewhere — including Mint Mobile who started <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-almost-bought-this-pixel-10-deal-that-shaves-58-percent-off-its-cost-but-this-prime-day-deal-is-even-better">selling the Pixel 10 for $549</a> around the same time. </p><p>Further discounts towards the end of the last year eventually saw that price matched at Amazon, with occasional discounts to that same price happening in the early months of 2026</p><p><a href="https://camelcamelcamel.com/product/B0FFTT2J6N?context=search" target="_blank" rel="nofollow">Price trackers</a> show <a href="https://camelcamelcamel.com/product/B0FFTPP3S7?context=search" target="_blank" rel="nofollow">similar trends</a> with the Pixel 10 Pro and Pixel 10 Pro XL — though the larger phone's discounts are a little more erratic. The Pixel 10 Pro Fold <a href="https://camelcamelcamel.com/product/B0FFTNCY4Z?context=search" target="_blank" rel="nofollow">took longer</a> to go on sale, and didn't get any <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-fold-is-already-usd300-off-ahead-of-black-friday-and-its-not-even-a-month-old">meaningful discount until November</a>, with the likes of Amazon, Google and Best Buy all knocking $300 off.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xr0pBW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xr0pBW.js" async></script><h2 id="this-trend-isn-t-exclusive-to-pixel-10-either">This trend isn't exclusive to Pixel 10 either</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1043px;"><p class="vanilla-image-block" style="padding-top:58.29%;"><img id="e6w8ptHKzuuS2unzuADPnC" name="Screenshot 2026-08-13 125228" alt="camelcamelcamel price history for pixel smartphones" src="https://cdn.mos.cms.futurecdn.net/e6w8ptHKzuuS2unzuADPnC.png" mos="" align="middle" fullscreen="" width="1043" height="608" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Pixel 9 price history </span><span class="credit" itemprop="copyrightHolder">(Image credit: CamelCamelCamel)</span></figcaption></figure><p>The quick discount situation is an ongoing trend for Pixel phones and it is pretty common to see those prices dropping within a couple of months of release date. </p><p><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Pixel 9</a> prices <a href="https://camelcamelcamel.com/product/B0D7HWPR3J" target="_blank" rel="nofollow">first dropped</a> in October 2024, following the late August launch, though the price tracker does seem to have more ups and downs than a rollercoaster during the later months of 2024. </p><p>We saw the price <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-is-down-to-its-lowest-ever-price-for-black-friday-usd250-off">drop as low as $548 during that year's Black Friday sales</a>, though prices seemingly stabilized until before the Pixel 10 launch — after which they started to dip even further and more frequently.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/sA7ZoFKoD7cWZkFzaW9vqC.png" alt="camelcamelcamel price history for pixel smartphones" /><figcaption>Pixel 8 price history<small role="credit">CamelCamelCamel</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YLLydnjJE9939axx57PxjC.png" alt="camelcamelcamel price history for pixel smartphones" /><figcaption>Pixel 7 price history<small role="credit">CamelCamelCamel</small></figcaption></figure></figure><p>Things never seem to get quite as low as the <a href="https://www.tomsguide.com/reviews/google-pixel-8">Pixel 8</a>, which has been <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-pixel-8-deal-is-so-good-it-makes-the-iphone-se-4-irrelevant-heres-why">spotted for as low as $399</a>. However, that low price happened in February 2025, almost a year and a half after it was first released. </p><p>I don't think waiting that long is worth it, but the <a href="https://camelcamelcamel.com/product/B0CGT5CLJR" target="_blank" rel="nofollow">price trackers</a> do show the first dips in price happening around the Black Friday and holiday shopping seasons — occurring less than 2 months after the phone's October 2023 release.</p><p>The<a href="https://www.tomsguide.com/reviews/google-pixel-7"> Pixel 7 </a>followed a <a href="https://camelcamelcamel.com/product/B0BCQXY52Z" target="_blank" rel="nofollow">similar trend</a>, eventually tapering out at around $449 almost a year after its initial release.</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:1027px;"><p class="vanilla-image-block" style="padding-top:58.42%;"><img id="BzPQPtP6ynEiUTfhTqVkai" name="Screenshot 2026-08-13 130215" alt="CamcelCamelCamel price history pixel 6" src="https://cdn.mos.cms.futurecdn.net/BzPQPtP6ynEiUTfhTqVkai.png" mos="" align="middle" fullscreen="" width="1027" height="600" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: CamcelCamelCamel)</span></figcaption></figure><p>Though going back, it seems the <a href="https://www.tomsguide.com/reviews/google-pixel-6">Pixel 6</a> wasn't quite so quick to drop in price, and the <a href="https://camelcamelcamel.com/product/B09HJZPFDD" target="_blank" rel="nofollow">price trackers</a> don't have a lot of information from that far back. But considering the Pixel 6 started at $599, there wasn't a lot of room for price cuts until much later in its life cycle.</p><p>Regardless, we've seen that the last four generations of Pixel phones have enjoyed generous discounts very soon after release. Which tells me that we should certainly wait and see whether the Pixel 11 follows the same trend — because odds are that it will.</p><h2 id="the-pixel-10-might-be-the-better-option-right-now">The Pixel 10 might be the better option right now</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="B6xf9wRsTkmcQXcqWmrm76" name="Google Pixel 10 hands-on" alt="Google Pixel 10 hands-on." src="https://cdn.mos.cms.futurecdn.net/B6xf9wRsTkmcQXcqWmrm76.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>Saving money is all well and good, but there is one more question you need to ask yourself before you pick up a Pixel 11 series phone. And that is, "would you be just as happy with a Pixel 10 instead?"</p><p>Not only are Pixel 10 series phones cheaper than their Pixel 11-series counterparts, the differences between them aren't actually that extreme. Whether you're looking at the standard model or the Pixel 11 Pro XL, you're not getting a lot of upgrades. </p><p>There's a new modem, 256GB of base storage, faster wireless charging (25W vs 15W) and the Tensor G6 chipset. There's also a smaller battery, which doesn't fill me with much confidence.</p><p>The difference on the Pixel 11 Pro XL is even worse, since the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">10 Pro XL</a> already came with 25W wireless charging and 256GB of storage as standard. It apparently charges a little faster, gaining an extra 5% battery in half an hour, but that's the only extra upgrade it has compared to the smaller 11 Pro.</p><p>Admittedly we haven't done any lab testing with the Pixel 11 series yet, so we don't know how much of a change there is in terms of performance and battery life. So our opinion on the Pixel 11 upgrades may change later.</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="iVNEmmueNzFN5vbZ9igoS6" name="Google Pixel 11 Pro XL hands-on" alt="Google Pixel 11 Pro XL hands-on." src="https://cdn.mos.cms.futurecdn.net/iVNEmmueNzFN5vbZ9igoS6.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>It's also worth noting that the Pro models also suffer from reduced RAM on their cheapest option, with 12GB of memory on models with 256GB of RAM. Meanwhile 16GB was standard on all <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro </a>and XL variants, including 128GB and 256GB storage variants. </p><p>Considering additional RAM is essential for on-device AI features, this actually puts the cheapest Pixel 10 Pro models at an advantage compared to their successors. </p><p>You can pick up a Pixel 11 Pro or Pro XL with 16GB of RAM, but you'll need to pay out for the higher 512GB and 1TB storage variants. That'll cost you an extra $120 for 512GB or $350 for 1TB. All while the equivalent Pixel 10s are available with heavy discounts, even if that means you need to pick up a refurbished model.</p><h2 id="bottom-line-it-all-comes-down-to-pre-order-bonuses">Bottom line: It all comes down to pre-order bonuses</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4644px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="jHskRTMrcqdyRp2ue5MRyf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/jHskRTMrcqdyRp2ue5MRyf.jpg" mos="" align="middle" fullscreen="" width="4644" height="2612" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The one thing that may affect your decision to pre-order or wait are the pre-order bonuses that are on offer. <a href="https://store.google.com/" target="_blank" rel="nofollow">Google is offering</a> increased trade-in credit during the pre-order window, gift cards with each new phone sold and discounts on the Pixel Watch 5. However the amount you get will vary depending on the device you buy and what you trade-in, and different retailers may have their own promotions in mind.</p><p>Pro buyers get up to $600 trade-in credit, a $200 gift card and $250 off a Pixel Watch 5. Meanwhile Pixel 11 owners are restricted to $500 trade-in credit, a $100 card and $130 off the Watch 5. This could be enough to sway you into buying, especially if you were planning on buying a Pixel Watch 5 and other Google accessories anyway. </p><p>But if all you're interested in is the new phone, then you are better off waiting. A little bit of patience could save you a few hundred dollars compared to buying the phone outright, especially if you weren't planning on trading in your old device — or it's in such bad condition you wouldn't get much for it. Because, odds are, in a couple of months we'll have seen the first Pixel 11 deals already, and you might be kicking yourself for paying the newly released prices right away.</p><p>And if the prices somehow don't go down in the next few months, it's not like you lost out on anything by waiting. </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/google-bamboozled-me-into-paying-for-google-photos-a-decade-ago-and-now-its-doing-something-similar-with-the-pixel-11-pro">Google bamboozled me into paying for Google Photos a decade ago — and now it’s doing something similar with the Pixel 11 Pro</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">After 10 years of Pixels, why is Google still making phones?</a></li><li><a href="">iPhone 18 Pro could see absolutely massive price hike according to researchers</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/the-pixel-11-is-available-to-pre-order-but-you-probably-shouldnt-right-now-heres-why</link>
                                                                            <description>
                            <![CDATA[ Paying full price for a Pixel phone feels more and more like choosing to be ripped off. Here's why you should wait before buying a Pixel 11. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">TYLatP5TEY6HCNuNmV9eBR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/tz7X2mBLxChtjfsg5nAkzf-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 13 Aug 2026 12:57:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/tz7X2mBLxChtjfsg5nAkzf-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 hands-on.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/tz7X2mBLxChtjfsg5nAkzf-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google has officially revealed the Pixel 11 series, and pre-orders are now open ahead of an official release date of August 20. The four new phones don't offer amazing upgrades compared to the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series, but there's enough that some of you are probably prepping to pre-order this phone as soon as you can. I'm here to tell you why you shouldn't do that.</p><p>The thing about Pixel phones is that they're like video games. You could buy them as soon as they're released, and pay full price to experience them right away, but you're just spending money that could be better used for other things. And it all comes down to the fact Pixel phones are essentially the mattresses of the smartphone world. </p><p>Considering how often, and how quickly the newest Pixel phones go on sale, paying full price is essentially agreeing to be ripped off.</p><h2 id="pixel-discounts-happen-regularly-and-quickly">Pixel discounts happen regularly, and quickly</h2><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="sSYrLScYBnAxaEKZuabVC" name="Google Pixel 11 Pro hands-on" alt="Google Pixel 11 Pro hands-on." src="https://cdn.mos.cms.futurecdn.net/sSYrLScYBnAxaEKZuabVC.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Imagine you're looking at a new phone that's just been released. The $900 price tag is a little expensive for your tastes, but you know that waiting for a major discount is a fool's errand. Maybe you'll be able to save a bit of money during the next sales event, like Black Friday or Prime Day, but there's never any guarantee that it'll actually happen — or how much money you might save.</p><p>For the last few years I've noticed that this isn't the case with Pixel phones. In fact, sometimes the discounts can start coming within a few weeks of the phone actually going on sale. If you're willing to wait for the Fall Prime Day sale, or the Black Friday season, you could be looking at a pretty hefty discount.</p><p>Admittedly I am making an assumption about what the future holds for the Pixel 11 series. I don't have a crystal ball or magic powers that let me see into the future. But <a href="https://www.tomsguide.com/phones/google-pixel-phones/im-buying-a-pixel-9-pro-but-plan-to-wait-heres-why">this is not the first time I've noticed this trend</a>, and I would be very surprised if the Pixel 11 broke rank.</p><h2 id="pixel-10-discounts-we-spotted-last-year">Pixel 10 discounts we spotted last year</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="V8JEkeQQF6dhQEXUDzajk6" name="Google Pixel 10 hands-on" alt="Google Pixel 10 hands-on." src="https://cdn.mos.cms.futurecdn.net/V8JEkeQQF6dhQEXUDzajk6.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>The first Pixel 10 discount we spotted was at the start of September 2025, during <a href="https://www.tomsguide.com/sales-events/amazons-labor-day-sale-is-massive-but-these-are-the-only-deals-id-shop">Amazon's Labor Day sales</a>. The phone didn't get any discounts, per se, but buying one did net you a <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-just-arrived-and-its-already-in-amazons-labor-day-sale-get-a-usd200-gift-card-when-you-buy">free $200 Amazon gift</a> card. While it's not the same as cold-hard cash, Amazon's ubiquity means that this is almost as good as getting $200 off your total.</p><p>I should mention at this point that the Pixel 10 was released on August 28, with pre-orders opening eight days earlier on August 20. This means the first Pixel 10 retailer deal happened just four days after release day.</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:1046px;"><p class="vanilla-image-block" style="padding-top:57.93%;"><img id="yDrUHE4QzJn2CkJ5uqXkfC" name="Screenshot 2026-08-13 125239" alt="camelcamelcamel price history for pixel smartphones" src="https://cdn.mos.cms.futurecdn.net/yDrUHE4QzJn2CkJ5uqXkfC.png" mos="" align="middle" fullscreen="" width="1046" height="606" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Pixel 10 price history </span><span class="credit" itemprop="copyrightHolder">(Image credit: CamelCamelCamel)</span></figcaption></figure><p>The first <a href="https://camelcamelcamel.com/product/B0FFTV1LXZ?context=search" target="_blank" rel="nofollow">actual discount</a> happened in early October, during Amazon's fall Prime Day, with the $799 price tag <a href="https://www.tomsguide.com/phones/11-incredible-prime-day-phone-deals-live-save-big-on-samsung-google-motorola-and-more">dropping to $649</a>. That's just on Amazon too, and further price drops did happen elsewhere — including Mint Mobile who started <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-almost-bought-this-pixel-10-deal-that-shaves-58-percent-off-its-cost-but-this-prime-day-deal-is-even-better">selling the Pixel 10 for $549</a> around the same time. </p><p>Further discounts towards the end of the last year eventually saw that price matched at Amazon, with occasional discounts to that same price happening in the early months of 2026</p><p><a href="https://camelcamelcamel.com/product/B0FFTT2J6N?context=search" target="_blank" rel="nofollow">Price trackers</a> show <a href="https://camelcamelcamel.com/product/B0FFTPP3S7?context=search" target="_blank" rel="nofollow">similar trends</a> with the Pixel 10 Pro and Pixel 10 Pro XL — though the larger phone's discounts are a little more erratic. The Pixel 10 Pro Fold <a href="https://camelcamelcamel.com/product/B0FFTNCY4Z?context=search" target="_blank" rel="nofollow">took longer</a> to go on sale, and didn't get any <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-fold-is-already-usd300-off-ahead-of-black-friday-and-its-not-even-a-month-old">meaningful discount until November</a>, with the likes of Amazon, Google and Best Buy all knocking $300 off.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xr0pBW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xr0pBW.js" async></script><h2 id="this-trend-isn-t-exclusive-to-pixel-10-either">This trend isn't exclusive to Pixel 10 either</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1043px;"><p class="vanilla-image-block" style="padding-top:58.29%;"><img id="e6w8ptHKzuuS2unzuADPnC" name="Screenshot 2026-08-13 125228" alt="camelcamelcamel price history for pixel smartphones" src="https://cdn.mos.cms.futurecdn.net/e6w8ptHKzuuS2unzuADPnC.png" mos="" align="middle" fullscreen="" width="1043" height="608" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Pixel 9 price history </span><span class="credit" itemprop="copyrightHolder">(Image credit: CamelCamelCamel)</span></figcaption></figure><p>The quick discount situation is an ongoing trend for Pixel phones and it is pretty common to see those prices dropping within a couple of months of release date. </p><p><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Pixel 9</a> prices <a href="https://camelcamelcamel.com/product/B0D7HWPR3J" target="_blank" rel="nofollow">first dropped</a> in October 2024, following the late August launch, though the price tracker does seem to have more ups and downs than a rollercoaster during the later months of 2024. </p><p>We saw the price <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-is-down-to-its-lowest-ever-price-for-black-friday-usd250-off">drop as low as $548 during that year's Black Friday sales</a>, though prices seemingly stabilized until before the Pixel 10 launch — after which they started to dip even further and more frequently.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/sA7ZoFKoD7cWZkFzaW9vqC.png" alt="camelcamelcamel price history for pixel smartphones" /><figcaption>Pixel 8 price history<small role="credit">CamelCamelCamel</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YLLydnjJE9939axx57PxjC.png" alt="camelcamelcamel price history for pixel smartphones" /><figcaption>Pixel 7 price history<small role="credit">CamelCamelCamel</small></figcaption></figure></figure><p>Things never seem to get quite as low as the <a href="https://www.tomsguide.com/reviews/google-pixel-8">Pixel 8</a>, which has been <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-pixel-8-deal-is-so-good-it-makes-the-iphone-se-4-irrelevant-heres-why">spotted for as low as $399</a>. However, that low price happened in February 2025, almost a year and a half after it was first released. </p><p>I don't think waiting that long is worth it, but the <a href="https://camelcamelcamel.com/product/B0CGT5CLJR" target="_blank" rel="nofollow">price trackers</a> do show the first dips in price happening around the Black Friday and holiday shopping seasons — occurring less than 2 months after the phone's October 2023 release.</p><p>The<a href="https://www.tomsguide.com/reviews/google-pixel-7"> Pixel 7 </a>followed a <a href="https://camelcamelcamel.com/product/B0BCQXY52Z" target="_blank" rel="nofollow">similar trend</a>, eventually tapering out at around $449 almost a year after its initial release.</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:1027px;"><p class="vanilla-image-block" style="padding-top:58.42%;"><img id="BzPQPtP6ynEiUTfhTqVkai" name="Screenshot 2026-08-13 130215" alt="CamcelCamelCamel price history pixel 6" src="https://cdn.mos.cms.futurecdn.net/BzPQPtP6ynEiUTfhTqVkai.png" mos="" align="middle" fullscreen="" width="1027" height="600" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: CamcelCamelCamel)</span></figcaption></figure><p>Though going back, it seems the <a href="https://www.tomsguide.com/reviews/google-pixel-6">Pixel 6</a> wasn't quite so quick to drop in price, and the <a href="https://camelcamelcamel.com/product/B09HJZPFDD" target="_blank" rel="nofollow">price trackers</a> don't have a lot of information from that far back. But considering the Pixel 6 started at $599, there wasn't a lot of room for price cuts until much later in its life cycle.</p><p>Regardless, we've seen that the last four generations of Pixel phones have enjoyed generous discounts very soon after release. Which tells me that we should certainly wait and see whether the Pixel 11 follows the same trend — because odds are that it will.</p><h2 id="the-pixel-10-might-be-the-better-option-right-now">The Pixel 10 might be the better option right now</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="B6xf9wRsTkmcQXcqWmrm76" name="Google Pixel 10 hands-on" alt="Google Pixel 10 hands-on." src="https://cdn.mos.cms.futurecdn.net/B6xf9wRsTkmcQXcqWmrm76.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>Saving money is all well and good, but there is one more question you need to ask yourself before you pick up a Pixel 11 series phone. And that is, "would you be just as happy with a Pixel 10 instead?"</p><p>Not only are Pixel 10 series phones cheaper than their Pixel 11-series counterparts, the differences between them aren't actually that extreme. Whether you're looking at the standard model or the Pixel 11 Pro XL, you're not getting a lot of upgrades. </p><p>There's a new modem, 256GB of base storage, faster wireless charging (25W vs 15W) and the Tensor G6 chipset. There's also a smaller battery, which doesn't fill me with much confidence.</p><p>The difference on the Pixel 11 Pro XL is even worse, since the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">10 Pro XL</a> already came with 25W wireless charging and 256GB of storage as standard. It apparently charges a little faster, gaining an extra 5% battery in half an hour, but that's the only extra upgrade it has compared to the smaller 11 Pro.</p><p>Admittedly we haven't done any lab testing with the Pixel 11 series yet, so we don't know how much of a change there is in terms of performance and battery life. So our opinion on the Pixel 11 upgrades may change later.</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="iVNEmmueNzFN5vbZ9igoS6" name="Google Pixel 11 Pro XL hands-on" alt="Google Pixel 11 Pro XL hands-on." src="https://cdn.mos.cms.futurecdn.net/iVNEmmueNzFN5vbZ9igoS6.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>It's also worth noting that the Pro models also suffer from reduced RAM on their cheapest option, with 12GB of memory on models with 256GB of RAM. Meanwhile 16GB was standard on all <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro </a>and XL variants, including 128GB and 256GB storage variants. </p><p>Considering additional RAM is essential for on-device AI features, this actually puts the cheapest Pixel 10 Pro models at an advantage compared to their successors. </p><p>You can pick up a Pixel 11 Pro or Pro XL with 16GB of RAM, but you'll need to pay out for the higher 512GB and 1TB storage variants. That'll cost you an extra $120 for 512GB or $350 for 1TB. All while the equivalent Pixel 10s are available with heavy discounts, even if that means you need to pick up a refurbished model.</p><h2 id="bottom-line-it-all-comes-down-to-pre-order-bonuses">Bottom line: It all comes down to pre-order bonuses</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4644px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="jHskRTMrcqdyRp2ue5MRyf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/jHskRTMrcqdyRp2ue5MRyf.jpg" mos="" align="middle" fullscreen="" width="4644" height="2612" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The one thing that may affect your decision to pre-order or wait are the pre-order bonuses that are on offer. <a href="https://store.google.com/" target="_blank" rel="nofollow">Google is offering</a> increased trade-in credit during the pre-order window, gift cards with each new phone sold and discounts on the Pixel Watch 5. However the amount you get will vary depending on the device you buy and what you trade-in, and different retailers may have their own promotions in mind.</p><p>Pro buyers get up to $600 trade-in credit, a $200 gift card and $250 off a Pixel Watch 5. Meanwhile Pixel 11 owners are restricted to $500 trade-in credit, a $100 card and $130 off the Watch 5. This could be enough to sway you into buying, especially if you were planning on buying a Pixel Watch 5 and other Google accessories anyway. </p><p>But if all you're interested in is the new phone, then you are better off waiting. A little bit of patience could save you a few hundred dollars compared to buying the phone outright, especially if you weren't planning on trading in your old device — or it's in such bad condition you wouldn't get much for it. Because, odds are, in a couple of months we'll have seen the first Pixel 11 deals already, and you might be kicking yourself for paying the newly released prices right away.</p><p>And if the prices somehow don't go down in the next few months, it's not like you lost out on anything by waiting. </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/google-bamboozled-me-into-paying-for-google-photos-a-decade-ago-and-now-its-doing-something-similar-with-the-pixel-11-pro">Google bamboozled me into paying for Google Photos a decade ago — and now it’s doing something similar with the Pixel 11 Pro</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">After 10 years of Pixels, why is Google still making phones?</a></li><li><a href="">iPhone 18 Pro could see absolutely massive price hike according to researchers</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 deals— top plans and offers in Australia ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google new Pixel 11 lineup released in Australia on August 20, and while that means that it's officially too late to take advantage of any pre-order bonuses, it's still possible to nab one of the new handsets at a great price from Australia's major retailers and carriers.</p><p>If you missed out on the lineup's announcement, here's a rundown: the 6.3‑inch <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a>, the entry flagship, available from AU$1,499. Next comes the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a>, also 6.3 inches, starting at AU$1,849, followed by the larger 6.8‑inch <a href="https://www.tomsguide.com/phones/samsung-phones/google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-which-android-flagship-will-be-the-better-choice">Pixel 11 Pro XL</a> at AU$2,099. Topping the range is the premium foldable <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold</a>, which sports a 6.5-inch outer display and 8‑inch inner display, priced from AU$2,799.</p><p>While the starting price for each device in the lineup has jumped by AU$100-AU$200, it's worth noting that Google has done away with the 128GB variant, with the base storage increased to 256GB.</p><p>The Pixel 11 series is powered by Google's new <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Tensor G6</a> processor, which is said to deliver a 20% increase in power efficiency, 25% faster browsing and 15% faster app loading. Meanwhile, the new Titan M3 chip offers stronger security via post-quantum cryptography. </p><p>Each device in the Pixel 11 range sports a redesigned camera bar with edge-to-edge glass and a metal frame for increased durability, while the Pro models get a new RGB ambient light system dubbed HiLight, which provides users with visual cues for caller ID, notifications and interactions with Gemini.</p><p>Cameras have also received some notable upgrades across the board — while raw megapixel counts have remained the same since last year's Pixel 10 series, the sensors themselves have been redesigned to let in more light, faster capture speeds and increased zoom up to 120x.</p><p>Pixel 11 pre-orders have closed, but there are still some bonuses and discounts available from Australia's top carriers and retailers — these are the best Pixel 11 deals and plans currently available.</p><h3 class="article-body__section" id="section-best-pixel-11-offers"><span>Best Pixel 11 offers</span></h3><p>While the pre-order period has technically closed, there are still some discounts and bonuses up for grabs for early adopters. On the telco side, Optus is offering up to AU$1,000 off for customers who stay connected to an eligible plan for 12, 24 or 36 months. You'll have to hurry though, as this offer expires on September 6, 2026.</p><p>For outright buyers, JB Hi‑Fi is bundling a Fitbit Air with the Pixel 11, Pixel 11 Pro and Pixel 11 Pro XL, upgrading audio perks to Pixel Buds 2a for Pixel 11 Pro buyers and Pixel Buds Pro 2 for Pixel 11 Pro XL pre‑orders. The biggest sweetener lands with the Pixel 11 Pro Fold: a Pixel Watch 5 (45mm) in Olive. You can find out more about these deals below.</p><div class="product star-deal"><a data-dimension112="fafd414c-96bd-11f1-8e94-991d3d514e89" data-action="Star Deal Block" data-label="Get AU$650 off the Pixel 11 or get a bonus PS5 with Pixel 11 Pro XL when you stay connected for 24 or 36 months" data-dimension48="Get AU$650 off the Pixel 11 or get a bonus PS5 with Pixel 11 Pro XL when you stay connected for 24 or 36 months" href="https://www.vodafone.com.au/mobile/mobile-phones/google" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="54GNiq6k5o4SuRzTz7jopT" name="vodafone-2006-logo-min.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/54GNiq6k5o4SuRzTz7jopT.png" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><div><span class="product__star-deal-label">Free PS5!</span><p><strong>Vodafone:</strong> <a href="https://www.vodafone.com.au/mobile/mobile-phones/google" target="_blank" data-dimension112="fafd414c-96bd-11f1-8e94-991d3d514e89" data-action="Star Deal Block" data-label="Get AU$650 off the Pixel 11 or get a bonus PS5 with Pixel 11 Pro XL when you stay connected for 24 or 36 months" data-dimension48="Get AU$650 off the Pixel 11 or get a bonus PS5 with Pixel 11 Pro XL when you stay connected for 24 or 36 months" data-dimension25=""><strong>Get AU$650 off the Pixel 11 or get a bonus PS5 with Pixel 11 Pro XL when you stay connected for 24 or 36 months</strong></a></p><p>Whether you want to save money over the long run or are a gamer looking for an immense value add, Vodafone is a great option. Those after the entry-level Pixel 11 will save AU$650 on the handset price over the course of their contract when they stay connected for 24 or 36 months. Meanwhile, those who pre-order the Pixel 11 Pro XL on the same contract terms will receive a bonus PlayStation 5 console! T&Cs apply.</p></div></div><div class="product star-deal"><a data-dimension112="fafd41b0-96bd-11f1-a045-3ddf1e90806d" data-action="Star Deal Block" data-label="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" data-dimension48="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" href="https://www.optus.com.au/mobile/phones?brand=google" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="YwvBBB6x3H2wXEEEevoNYC" name="Optus-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YwvBBB6x3H2wXEEEevoNYC.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><div><span class="product__star-deal-label">Save up to AU$1000</span><p><strong>Optus: </strong><a href="https://www.optus.com.au/mobile/phones?brand=google" target="_blank" data-dimension112="fafd41b0-96bd-11f1-a045-3ddf1e90806d" data-action="Star Deal Block" data-label="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" data-dimension48="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" data-dimension25=""><strong>Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months</strong></a></p><p>How's this for a deal — stay connected to an eligible plan for 12, 24 or 36 months, and over the course of your contract you'll save AU$500 on the Pixel 11 and Pixel 11 Pro, or AU$1,000 on the Pixel 11 Pro XL or Pixel 11 Pro Fold. T&Cs apply.<a class="view-deal button" href="https://www.optus.com.au/mobile/phones?brand=google" target="_blank" rel="nofollow" data-dimension112="fafd41b0-96bd-11f1-a045-3ddf1e90806d" data-action="Star Deal Block" data-label="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" data-dimension48="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" data-dimension25="">View Deal</a></p></div></div><div class="product star-deal"><a data-dimension112="fafd4264-96bd-11f1-930a-7dc1d4898017" data-action="Star Deal Block" data-label="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" data-dimension48="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" href="https://www.jbhifi.com.au/pages/google-pixel-preorder" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="dUMxuvDTBa7Tnj2jRqi8ME" name="JB-Hi-Fi-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dUMxuvDTBa7Tnj2jRqi8ME.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><div><span class="product__star-deal-label">Bonus items!</span><p><strong>JB Hi-Fi: </strong><a href="https://www.jbhifi.com.au/pages/google-pixel-preorder" target="_blank" data-dimension112="fafd4264-96bd-11f1-930a-7dc1d4898017" data-action="Star Deal Block" data-label="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" data-dimension48="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" data-dimension25=""><strong>Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order</strong></a></p><p>JB Hi-Fi isn’t discounting the Pixel 11 range outright, but it is sweetening the deal with a stack of bonus gear depending on which model you pre‑order. Grab the Pixel 11, Pixel 11 Pro or Pixel 11 Pro XL and you’ll score a free Google Fitbit Air fitness tracker. Pixel 11 Pro pre‑orders also pick up a pair of Pixel Buds 2a, while the Pixel 11 Pro XL bumps that up to the Pixel Buds Pro 2.</p><p>However, the biggest freebie is reserved for the Pixel 11 Pro Fold — JB is throwing in a Pixel Watch 5 (45mm) in the Olive colourway. T&Cs apply.<a class="view-deal button" href="https://www.jbhifi.com.au/pages/google-pixel-preorder" target="_blank" rel="nofollow" data-dimension112="fafd4264-96bd-11f1-930a-7dc1d4898017" data-action="Star Deal Block" data-label="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" data-dimension48="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" data-dimension25="">View Deal</a></p></div></div><div class="product star-deal"><a data-dimension112="fafd42be-96bd-11f1-8468-bd8ca3cb3d38" data-action="Star Deal Block" data-label="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" data-dimension48="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" href="https://www.thegoodguys.com.au/google-pixel-10-pro-xl-256gb-moonstone-100255920" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:349px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="iyUfaQopHD69rTRMiWJYrC" name="TGG.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iyUfaQopHD69rTRMiWJYrC.jpeg" mos="" align="middle" fullscreen="" width="349" height="349" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><div><span class="product__star-deal-label">Bonus items!</span><p><strong>The Good Guys: </strong><a href="https://www.thegoodguys.com.au/google-pixel-11-pro-xl-256gb-canyon-100257387" target="_blank" data-dimension112="fafd42be-96bd-11f1-8468-bd8ca3cb3d38" data-action="Star Deal Block" data-label="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" data-dimension48="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" data-dimension25=""><strong>Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL</strong></a></p><p>Surprisingly, The Good Guys only has the Pixel 11 Pro XL model up for pre-order at the moment, but at least it comes with some awesome bonus items: Fitbit Air (Black) and Pixel Buds Pro 2 (Olive). T&Cs apply.<a class="view-deal button" href="https://www.thegoodguys.com.au/google-pixel-10-pro-xl-256gb-moonstone-100255920" target="_blank" rel="nofollow" data-dimension112="fafd42be-96bd-11f1-8468-bd8ca3cb3d38" data-action="Star Deal Block" data-label="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" data-dimension48="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" data-dimension25="">View Deal</a></p></div></div><h3 class="article-body__section" id="section-best-pixel-11-plans"><span>Best Pixel 11 plans</span></h3><iframe allow="" height="1200" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://tomsguide.whistleout.com.au/Widgets/MobilePhoneSearch/Load?phone=Google-Pixel-11-256GB&maxresults=10&maxresultspersupplier=4&includefeatured=false&tab=instalments24&customer=Personal"></iframe><h3 class="article-body__section" id="section-best-pixel-11-pro-plans"><span>Best Pixel 11 Pro plans</span></h3><iframe allow="" height="900" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://tomsguide.whistleout.com.au/Widgets/MobilePhoneSearch/Load?phone=Google-Pixel-11-Pro-256GB&maxresults=10&maxresultspersupplier=4&includefeatured=false&tab=instalments24&customer=Personal"></iframe><h3 class="article-body__section" id="section-best-pixel-11-pro-xl-plans"><span>Best Pixel 11 Pro XL plans</span></h3><iframe allow="" height="900" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://tomsguide.whistleout.com.au/Widgets/MobilePhoneSearch/Load?phone=Google-Pixel-11-Pro-XL-256GB&maxresults=7&maxresultspersupplier=4&includefeatured=false&tab=instalments24&customer=Personal"></iframe><h3 class="article-body__section" id="section-best-pixel-11-pro-fold-plans"><span>Best Pixel 11 Pro Fold plans</span></h3><iframe allow="" height="670" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://tomsguide.whistleout.com.au/Widgets/MobilePhoneSearch/Load?calls=-1&customer=Personal&data=5000&phone=Google-Pixel-11-Pro-Fold-5G-256GB&sms=-1&maxresults=10&includefeatured=false&tab=instalments24&customer=Personal"></iframe> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-deals-au</link>
                                                                            <description>
                            <![CDATA[ Google's new Pixel 11 lineup is out now — we've rounded up all the best plans and offers from Australia's top carriers and retailers. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">xAdu5JEEjMLeMbZz7dDafn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/8tft3iNknc4cfs5N6Cna4H-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 13 Aug 2026 06:51:09 +0000</pubDate>                                                                                                                                <updated>Mon, 24 Aug 2026 23:13:21 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Stephen Lambrechts ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/JN3jEQpqyyt32as8AJJqXe.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Stephen Lambrechts is the Managing Editor of Tom&#039;s Guide AU and has written professionally across the categories of tech, film, television and gaming for the last 15 years. Before Tom&#039;s Guide, he spent several years as a Senior Journalist at TechRadar, had a brief stint as Editor in Chief at Official Xbox Magazine Australia, and worked at IGN. He&#039;s also written for such mags and sites as APC, TechLife Australia, T3, FilmInk, Daily Telegraph and AskMen. Additionally, he&#039;s a Tomatometer-approved critic on Rotten Tomatoes, and has offered his tech advice on radio and television.&lt;/p&gt;&lt;p&gt;He&#039;s an expert when it comes to smartphones, TVs, gaming and streaming, having contributed many reviews in each of those categories over the years. Despite his many articles on streaming, he&#039;s a passionate collector of physical media who enjoys listening to vinyl records and acquiring obscure horror movies from the &#039;60s, &#039;70s and 80s. He can usually be seen rocking the latest retro sneaker releases, particularly Air Jordans and Reebok Pumps. Occasionally, he also indulges in other non-hipster stuff, like hiking.&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/8tft3iNknc4cfs5N6Cna4H-1280-80.jpg">
                                                            <media:credit><![CDATA[Google]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[From left to right, Google&#039;s Pixel 11 Pro Fold, Pixel 11, Pixel 11 Pro, Pixel Watch 5 and Pixel 11 Pro XL]]></media:description>                                                            <media:text><![CDATA[From left to right, Google&#039;s Pixel 11 Pro Fold, Pixel 11, Pixel 11 Pro, Pixel Watch 5 and Pixel 11 Pro XL]]></media:text>
                                <media:title type="plain"><![CDATA[From left to right, Google&#039;s Pixel 11 Pro Fold, Pixel 11, Pixel 11 Pro, Pixel Watch 5 and Pixel 11 Pro XL]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/8tft3iNknc4cfs5N6Cna4H-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google new Pixel 11 lineup released in Australia on August 20, and while that means that it's officially too late to take advantage of any pre-order bonuses, it's still possible to nab one of the new handsets at a great price from Australia's major retailers and carriers.</p><p>If you missed out on the lineup's announcement, here's a rundown: the 6.3‑inch <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a>, the entry flagship, available from AU$1,499. Next comes the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a>, also 6.3 inches, starting at AU$1,849, followed by the larger 6.8‑inch <a href="https://www.tomsguide.com/phones/samsung-phones/google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-which-android-flagship-will-be-the-better-choice">Pixel 11 Pro XL</a> at AU$2,099. Topping the range is the premium foldable <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold</a>, which sports a 6.5-inch outer display and 8‑inch inner display, priced from AU$2,799.</p><p>While the starting price for each device in the lineup has jumped by AU$100-AU$200, it's worth noting that Google has done away with the 128GB variant, with the base storage increased to 256GB.</p><p>The Pixel 11 series is powered by Google's new <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Tensor G6</a> processor, which is said to deliver a 20% increase in power efficiency, 25% faster browsing and 15% faster app loading. Meanwhile, the new Titan M3 chip offers stronger security via post-quantum cryptography. </p><p>Each device in the Pixel 11 range sports a redesigned camera bar with edge-to-edge glass and a metal frame for increased durability, while the Pro models get a new RGB ambient light system dubbed HiLight, which provides users with visual cues for caller ID, notifications and interactions with Gemini.</p><p>Cameras have also received some notable upgrades across the board — while raw megapixel counts have remained the same since last year's Pixel 10 series, the sensors themselves have been redesigned to let in more light, faster capture speeds and increased zoom up to 120x.</p><p>Pixel 11 pre-orders have closed, but there are still some bonuses and discounts available from Australia's top carriers and retailers — these are the best Pixel 11 deals and plans currently available.</p><h3 class="article-body__section" id="section-best-pixel-11-offers"><span>Best Pixel 11 offers</span></h3><p>While the pre-order period has technically closed, there are still some discounts and bonuses up for grabs for early adopters. On the telco side, Optus is offering up to AU$1,000 off for customers who stay connected to an eligible plan for 12, 24 or 36 months. You'll have to hurry though, as this offer expires on September 6, 2026.</p><p>For outright buyers, JB Hi‑Fi is bundling a Fitbit Air with the Pixel 11, Pixel 11 Pro and Pixel 11 Pro XL, upgrading audio perks to Pixel Buds 2a for Pixel 11 Pro buyers and Pixel Buds Pro 2 for Pixel 11 Pro XL pre‑orders. The biggest sweetener lands with the Pixel 11 Pro Fold: a Pixel Watch 5 (45mm) in Olive. You can find out more about these deals below.</p><div class="product star-deal"><a data-dimension112="fafd414c-96bd-11f1-8e94-991d3d514e89" data-action="Star Deal Block" data-label="Get AU$650 off the Pixel 11 or get a bonus PS5 with Pixel 11 Pro XL when you stay connected for 24 or 36 months" data-dimension48="Get AU$650 off the Pixel 11 or get a bonus PS5 with Pixel 11 Pro XL when you stay connected for 24 or 36 months" href="https://www.vodafone.com.au/mobile/mobile-phones/google" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="54GNiq6k5o4SuRzTz7jopT" name="vodafone-2006-logo-min.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/54GNiq6k5o4SuRzTz7jopT.png" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><div><span class="product__star-deal-label">Free PS5!</span><p><strong>Vodafone:</strong> <a href="https://www.vodafone.com.au/mobile/mobile-phones/google" target="_blank" data-dimension112="fafd414c-96bd-11f1-8e94-991d3d514e89" data-action="Star Deal Block" data-label="Get AU$650 off the Pixel 11 or get a bonus PS5 with Pixel 11 Pro XL when you stay connected for 24 or 36 months" data-dimension48="Get AU$650 off the Pixel 11 or get a bonus PS5 with Pixel 11 Pro XL when you stay connected for 24 or 36 months" data-dimension25=""><strong>Get AU$650 off the Pixel 11 or get a bonus PS5 with Pixel 11 Pro XL when you stay connected for 24 or 36 months</strong></a></p><p>Whether you want to save money over the long run or are a gamer looking for an immense value add, Vodafone is a great option. Those after the entry-level Pixel 11 will save AU$650 on the handset price over the course of their contract when they stay connected for 24 or 36 months. Meanwhile, those who pre-order the Pixel 11 Pro XL on the same contract terms will receive a bonus PlayStation 5 console! T&Cs apply.</p></div></div><div class="product star-deal"><a data-dimension112="fafd41b0-96bd-11f1-a045-3ddf1e90806d" data-action="Star Deal Block" data-label="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" data-dimension48="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" href="https://www.optus.com.au/mobile/phones?brand=google" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="YwvBBB6x3H2wXEEEevoNYC" name="Optus-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YwvBBB6x3H2wXEEEevoNYC.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><div><span class="product__star-deal-label">Save up to AU$1000</span><p><strong>Optus: </strong><a href="https://www.optus.com.au/mobile/phones?brand=google" target="_blank" data-dimension112="fafd41b0-96bd-11f1-a045-3ddf1e90806d" data-action="Star Deal Block" data-label="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" data-dimension48="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" data-dimension25=""><strong>Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months</strong></a></p><p>How's this for a deal — stay connected to an eligible plan for 12, 24 or 36 months, and over the course of your contract you'll save AU$500 on the Pixel 11 and Pixel 11 Pro, or AU$1,000 on the Pixel 11 Pro XL or Pixel 11 Pro Fold. T&Cs apply.<a class="view-deal button" href="https://www.optus.com.au/mobile/phones?brand=google" target="_blank" rel="nofollow" data-dimension112="fafd41b0-96bd-11f1-a045-3ddf1e90806d" data-action="Star Deal Block" data-label="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" data-dimension48="Optus: Save up to AU$1,000 when you buy Pixel 11 and stay connected to an eligible plan for 12, 24 or 36 months" data-dimension25="">View Deal</a></p></div></div><div class="product star-deal"><a data-dimension112="fafd4264-96bd-11f1-930a-7dc1d4898017" data-action="Star Deal Block" data-label="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" data-dimension48="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" href="https://www.jbhifi.com.au/pages/google-pixel-preorder" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="dUMxuvDTBa7Tnj2jRqi8ME" name="JB-Hi-Fi-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dUMxuvDTBa7Tnj2jRqi8ME.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><div><span class="product__star-deal-label">Bonus items!</span><p><strong>JB Hi-Fi: </strong><a href="https://www.jbhifi.com.au/pages/google-pixel-preorder" target="_blank" data-dimension112="fafd4264-96bd-11f1-930a-7dc1d4898017" data-action="Star Deal Block" data-label="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" data-dimension48="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" data-dimension25=""><strong>Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order</strong></a></p><p>JB Hi-Fi isn’t discounting the Pixel 11 range outright, but it is sweetening the deal with a stack of bonus gear depending on which model you pre‑order. Grab the Pixel 11, Pixel 11 Pro or Pixel 11 Pro XL and you’ll score a free Google Fitbit Air fitness tracker. Pixel 11 Pro pre‑orders also pick up a pair of Pixel Buds 2a, while the Pixel 11 Pro XL bumps that up to the Pixel Buds Pro 2.</p><p>However, the biggest freebie is reserved for the Pixel 11 Pro Fold — JB is throwing in a Pixel Watch 5 (45mm) in the Olive colourway. T&Cs apply.<a class="view-deal button" href="https://www.jbhifi.com.au/pages/google-pixel-preorder" target="_blank" rel="nofollow" data-dimension112="fafd4264-96bd-11f1-930a-7dc1d4898017" data-action="Star Deal Block" data-label="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" data-dimension48="JB Hi-Fi: Bonus Pixel Buds Pro 2, Pixel Buds 2a, Fitbit Air and Pixel Watch 5 devices up for grabs depending on which Pixel 11 device you pre-order" data-dimension25="">View Deal</a></p></div></div><div class="product star-deal"><a data-dimension112="fafd42be-96bd-11f1-8468-bd8ca3cb3d38" data-action="Star Deal Block" data-label="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" data-dimension48="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" href="https://www.thegoodguys.com.au/google-pixel-10-pro-xl-256gb-moonstone-100255920" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:349px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="iyUfaQopHD69rTRMiWJYrC" name="TGG.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iyUfaQopHD69rTRMiWJYrC.jpeg" mos="" align="middle" fullscreen="" width="349" height="349" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><div><span class="product__star-deal-label">Bonus items!</span><p><strong>The Good Guys: </strong><a href="https://www.thegoodguys.com.au/google-pixel-11-pro-xl-256gb-canyon-100257387" target="_blank" data-dimension112="fafd42be-96bd-11f1-8468-bd8ca3cb3d38" data-action="Star Deal Block" data-label="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" data-dimension48="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" data-dimension25=""><strong>Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL</strong></a></p><p>Surprisingly, The Good Guys only has the Pixel 11 Pro XL model up for pre-order at the moment, but at least it comes with some awesome bonus items: Fitbit Air (Black) and Pixel Buds Pro 2 (Olive). T&Cs apply.<a class="view-deal button" href="https://www.thegoodguys.com.au/google-pixel-10-pro-xl-256gb-moonstone-100255920" target="_blank" rel="nofollow" data-dimension112="fafd42be-96bd-11f1-8468-bd8ca3cb3d38" data-action="Star Deal Block" data-label="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" data-dimension48="The Good Guys: Get a bonus Fitbit Air and Pixel Buds Pro 2 when you pre-order Google Pixel 11 Pro XL" data-dimension25="">View Deal</a></p></div></div><h3 class="article-body__section" id="section-best-pixel-11-plans"><span>Best Pixel 11 plans</span></h3><iframe allow="" height="1200" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://tomsguide.whistleout.com.au/Widgets/MobilePhoneSearch/Load?phone=Google-Pixel-11-256GB&maxresults=10&maxresultspersupplier=4&includefeatured=false&tab=instalments24&customer=Personal"></iframe><h3 class="article-body__section" id="section-best-pixel-11-pro-plans"><span>Best Pixel 11 Pro plans</span></h3><iframe allow="" height="900" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://tomsguide.whistleout.com.au/Widgets/MobilePhoneSearch/Load?phone=Google-Pixel-11-Pro-256GB&maxresults=10&maxresultspersupplier=4&includefeatured=false&tab=instalments24&customer=Personal"></iframe><h3 class="article-body__section" id="section-best-pixel-11-pro-xl-plans"><span>Best Pixel 11 Pro XL plans</span></h3><iframe allow="" height="900" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://tomsguide.whistleout.com.au/Widgets/MobilePhoneSearch/Load?phone=Google-Pixel-11-Pro-XL-256GB&maxresults=7&maxresultspersupplier=4&includefeatured=false&tab=instalments24&customer=Personal"></iframe><h3 class="article-body__section" id="section-best-pixel-11-pro-fold-plans"><span>Best Pixel 11 Pro Fold plans</span></h3><iframe allow="" height="670" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://tomsguide.whistleout.com.au/Widgets/MobilePhoneSearch/Load?calls=-1&customer=Personal&data=5000&phone=Google-Pixel-11-Pro-Fold-5G-256GB&sms=-1&maxresults=10&includefeatured=false&tab=instalments24&customer=Personal"></iframe>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google bamboozled me into paying for Google Photos a decade ago — and now it’s doing something similar with the Pixel 11 Pro ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I remember the old days when you got a new Android phone and, even before you finished the setup process, you were given the option to get <a href="https://www.tomsguide.com/news/google-photo-unlimited-free-photos-ends-june-1-what-to-do-now">free Google Photos backup</a>. Really, who would pass up an offer like that? Alternatively, when I reviewed the <a href="https://www.tomsguide.com/us/motorola-moto-x,review-2420.html">Moto X</a>, I was floored by its promotion offering 50GB of free Google Drive storage for two years.</p><p>Clearly, I got hooked on all of these free offers and didn’t think much about how dependent I’d ultimately become on cloud storage. So, when all of the promotions expired, I was forced to shell out for a subscription. And you know what? This same strategy is playing out all over again with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a> launch.</p><p>While some people question <a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">why Google is still making phones</a>, I think the hardware portfolio functions as a digital lure — pulling us into an ecosystem that we can’t live without. And that’s what I love and hate about Google AI Pro. Here’s why.</p><h2 id="pixel-11-pro-launch-follows-a-similar-strategy-with-google-ai-pro">Pixel 11 Pro launch follows a similar strategy with Google AI Pro</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bBnjDGSAGN3FPPPwvfLFS6" name="Google Pixel 11 Pro XL hands-on" alt="Google Pixel 11 Pro XL hands-on." src="https://cdn.mos.cms.futurecdn.net/bBnjDGSAGN3FPPPwvfLFS6.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Just a couple of years ago, when the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-review">Pixel 9 Pro</a> launched, Google was offering a <a href="https://www.tomsguide.com/phones/google-pixel-phones/googles-cheating-pixel-9-buyers-by-keeping-this-a-pro-exclusive-perk">free one-year trial of Gemini Advanced</a> with your purchase. That was my first real taste of Google’s new AI features, and it served as my introduction to Gemini Live.</p><p>I was skeptical about how AI could transform my daily life, but as I spent more time exploring <a href="https://www.tomsguide.com/ai/google-gemini/gemini-live-what-features-are-available-now-and-what-is-coming-soon">Gemini Live</a> and the other features on the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-xl-review">Pixel 9 Pro and 9 Pro XL</a> — like <a href="https://www.tomsguide.com/phones/how-to-use-the-google-pixel-9-reimagine-ai-feature-for-stunning-photo-edits">Reimagine</a>, <a href="https://www.tomsguide.com/phones/pixel-studio-can-finally-generate-people-and-thats-not-the-only-change-google-is-bringing-to-pixel-phones">Pixel Studio</a>, and <a href="https://www.tomsguide.com/phones/google-pixel-phones/how-to-use-pixel-screenshots">Pixel Screenshots</a> — I became increasingly reliant on them.</p><p>Naturally, there are a few impressive new capabilities unlocked with Google AI Pro on the Pixel 11 Pro, 11 Pro XL, and 11 Pro Fold. For example, I got to try out one of Google’s latest models on the Pixel 11 Pro, <a href="https://www.tomsguide.com/ai/gemini-omni-flash-can-create-and-edit-videos-with-your-voice-and-it-feels-like-the-future-of-multimodal-ai">Gemini Omni</a>, which can create and edit videos for me. I’m not just talking about generating clips from text prompts because it can take existing videos I’ve shot and apply real edits — like adding effects, replacing backgrounds, and much more.</p><p>What’s truly impressive about this model is how intuitive it is. You simply launch Gemini, attach your video, and type out your requests. After a couple of minutes, it pulls off edits that would be nearly impossible for me to execute manually in my professional video editing software.</p><p>Having worked in retail past, I know that services and subscriptions are high-margin revenue drivers. That's part of the reason why Google continues to make phones. If you’re like me and these AI tools become indispensable to your workflow, you’re far more likely to pony up down the road just to keep them.</p><h2 id="proof-that-software-is-more-critical-than-hardware">Proof that software is more critical than hardware</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2300px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Pv9At59u68QQSriwKhhrha" name="Google Pixel 11 Pro Fold-18" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/Pv9At59u68QQSriwKhhrha.jpg" mos="" align="middle" fullscreen="" width="2300" height="1294" 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>Google’s long-term play has always been about software. Even now, the company’s hardware lacks the design innovation I see from its rivals — specifically, the ultra-thin build of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a>, the durable construction of Motorola’s Razr foldables, or the built-in <a href="https://www.tomsguide.com/phones/samsung-phones/the-galaxy-s26-ultras-privacy-display-is-more-exciting-to-me-than-any-ai-feature">Privacy Display</a> on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26 Ultra</a>.</p><p>Honestly, it gets confusing keeping track of all the subscriptions and services I’ve been locked into over the past few years. I eventually moved up from a simple Google Photos backup tier to a larger <a href="https://www.tomsguide.com/us/google-one-faq,news-27207.html">Google One plan</a> for expanded Google Drive storage—and even that wasn’t enough.</p><p>Late last year, I finally caved and consolidated my Google subscriptions into a single <a href="https://one.google.com/intl/en_us/about/google-ai-plans/" target="_blank">Google AI Pro plan</a>, which costs $19.99 per month and includes 5TB of Google Drive storage. These days, I find myself leaning heavily on <a href="https://www.tomsguide.com/ai/i-ditched-my-paper-planner-for-gemini-live-and-it-solved-the-one-problem-i-couldnt-fix">Gemini Live</a> for all sorts of tasks.</p><p>For example, I use it to quickly pull the best sequences from client video shoots by feeding it the transcript alongside timestamps of the spoken dialogue. Rather than scrubbing through hours of raw footage, Gemini analyzes the text and serves up the exact clips I need. It’s an undeniable timesaver and something I’ve come to deeply appreciate.</p><p>I think Google realizes it doesn't need to win the hardware volume war against Apple or Samsung to succeed. By prioritizing AI-first features that quietly become critical to our daily workflows, Google is banking on its software and services to move the needle. Quite frankly, it's effectively selling a subscription service that just happens to come wrapped inside a phone.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OKBkKW"></div>                            </div>                            <script src="https://kwizly.com/embed/OKBkKW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones"><strong>After 10 years of Pixels, why is Google still making phones?</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more"><strong>Made by Google event — how to watch and what to expect</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-and-iphone-18-pro-pre-order-date-just-tipped-heres-when-you-can-get-yours"><strong>iPhone Ultra and iPhone 18 Pro pre-order date just tipped — here's when you can get yours</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/google-bamboozled-me-into-paying-for-google-photos-a-decade-ago-and-now-its-doing-something-similar-with-the-pixel-11-pro</link>
                                                                            <description>
                            <![CDATA[ Google continues to make and sell hardware, but the real gold is in how its AI features on Pixel phones have proven to be indispensable in how I operate. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">dcYF9tehBMsJzETTyThUSa</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sSYrLScYBnAxaEKZuabVC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 13 Aug 2026 04:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.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/sSYrLScYBnAxaEKZuabVC-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 Pro hands-on.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 Pro hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 Pro hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sSYrLScYBnAxaEKZuabVC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I remember the old days when you got a new Android phone and, even before you finished the setup process, you were given the option to get <a href="https://www.tomsguide.com/news/google-photo-unlimited-free-photos-ends-june-1-what-to-do-now">free Google Photos backup</a>. Really, who would pass up an offer like that? Alternatively, when I reviewed the <a href="https://www.tomsguide.com/us/motorola-moto-x,review-2420.html">Moto X</a>, I was floored by its promotion offering 50GB of free Google Drive storage for two years.</p><p>Clearly, I got hooked on all of these free offers and didn’t think much about how dependent I’d ultimately become on cloud storage. So, when all of the promotions expired, I was forced to shell out for a subscription. And you know what? This same strategy is playing out all over again with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a> launch.</p><p>While some people question <a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">why Google is still making phones</a>, I think the hardware portfolio functions as a digital lure — pulling us into an ecosystem that we can’t live without. And that’s what I love and hate about Google AI Pro. Here’s why.</p><h2 id="pixel-11-pro-launch-follows-a-similar-strategy-with-google-ai-pro">Pixel 11 Pro launch follows a similar strategy with Google AI Pro</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bBnjDGSAGN3FPPPwvfLFS6" name="Google Pixel 11 Pro XL hands-on" alt="Google Pixel 11 Pro XL hands-on." src="https://cdn.mos.cms.futurecdn.net/bBnjDGSAGN3FPPPwvfLFS6.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Just a couple of years ago, when the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-review">Pixel 9 Pro</a> launched, Google was offering a <a href="https://www.tomsguide.com/phones/google-pixel-phones/googles-cheating-pixel-9-buyers-by-keeping-this-a-pro-exclusive-perk">free one-year trial of Gemini Advanced</a> with your purchase. That was my first real taste of Google’s new AI features, and it served as my introduction to Gemini Live.</p><p>I was skeptical about how AI could transform my daily life, but as I spent more time exploring <a href="https://www.tomsguide.com/ai/google-gemini/gemini-live-what-features-are-available-now-and-what-is-coming-soon">Gemini Live</a> and the other features on the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-xl-review">Pixel 9 Pro and 9 Pro XL</a> — like <a href="https://www.tomsguide.com/phones/how-to-use-the-google-pixel-9-reimagine-ai-feature-for-stunning-photo-edits">Reimagine</a>, <a href="https://www.tomsguide.com/phones/pixel-studio-can-finally-generate-people-and-thats-not-the-only-change-google-is-bringing-to-pixel-phones">Pixel Studio</a>, and <a href="https://www.tomsguide.com/phones/google-pixel-phones/how-to-use-pixel-screenshots">Pixel Screenshots</a> — I became increasingly reliant on them.</p><p>Naturally, there are a few impressive new capabilities unlocked with Google AI Pro on the Pixel 11 Pro, 11 Pro XL, and 11 Pro Fold. For example, I got to try out one of Google’s latest models on the Pixel 11 Pro, <a href="https://www.tomsguide.com/ai/gemini-omni-flash-can-create-and-edit-videos-with-your-voice-and-it-feels-like-the-future-of-multimodal-ai">Gemini Omni</a>, which can create and edit videos for me. I’m not just talking about generating clips from text prompts because it can take existing videos I’ve shot and apply real edits — like adding effects, replacing backgrounds, and much more.</p><p>What’s truly impressive about this model is how intuitive it is. You simply launch Gemini, attach your video, and type out your requests. After a couple of minutes, it pulls off edits that would be nearly impossible for me to execute manually in my professional video editing software.</p><p>Having worked in retail past, I know that services and subscriptions are high-margin revenue drivers. That's part of the reason why Google continues to make phones. If you’re like me and these AI tools become indispensable to your workflow, you’re far more likely to pony up down the road just to keep them.</p><h2 id="proof-that-software-is-more-critical-than-hardware">Proof that software is more critical than hardware</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2300px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Pv9At59u68QQSriwKhhrha" name="Google Pixel 11 Pro Fold-18" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/Pv9At59u68QQSriwKhhrha.jpg" mos="" align="middle" fullscreen="" width="2300" height="1294" 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>Google’s long-term play has always been about software. Even now, the company’s hardware lacks the design innovation I see from its rivals — specifically, the ultra-thin build of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a>, the durable construction of Motorola’s Razr foldables, or the built-in <a href="https://www.tomsguide.com/phones/samsung-phones/the-galaxy-s26-ultras-privacy-display-is-more-exciting-to-me-than-any-ai-feature">Privacy Display</a> on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26 Ultra</a>.</p><p>Honestly, it gets confusing keeping track of all the subscriptions and services I’ve been locked into over the past few years. I eventually moved up from a simple Google Photos backup tier to a larger <a href="https://www.tomsguide.com/us/google-one-faq,news-27207.html">Google One plan</a> for expanded Google Drive storage—and even that wasn’t enough.</p><p>Late last year, I finally caved and consolidated my Google subscriptions into a single <a href="https://one.google.com/intl/en_us/about/google-ai-plans/" target="_blank">Google AI Pro plan</a>, which costs $19.99 per month and includes 5TB of Google Drive storage. These days, I find myself leaning heavily on <a href="https://www.tomsguide.com/ai/i-ditched-my-paper-planner-for-gemini-live-and-it-solved-the-one-problem-i-couldnt-fix">Gemini Live</a> for all sorts of tasks.</p><p>For example, I use it to quickly pull the best sequences from client video shoots by feeding it the transcript alongside timestamps of the spoken dialogue. Rather than scrubbing through hours of raw footage, Gemini analyzes the text and serves up the exact clips I need. It’s an undeniable timesaver and something I’ve come to deeply appreciate.</p><p>I think Google realizes it doesn't need to win the hardware volume war against Apple or Samsung to succeed. By prioritizing AI-first features that quietly become critical to our daily workflows, Google is banking on its software and services to move the needle. Quite frankly, it's effectively selling a subscription service that just happens to come wrapped inside a phone.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OKBkKW"></div>                            </div>                            <script src="https://kwizly.com/embed/OKBkKW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones"><strong>After 10 years of Pixels, why is Google still making phones?</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more"><strong>Made by Google event — how to watch and what to expect</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-and-iphone-18-pro-pre-order-date-just-tipped-heres-when-you-can-get-yours"><strong>iPhone Ultra and iPhone 18 Pro pre-order date just tipped — here's when you can get yours</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I checked out the Pixel 11, Pixel 11 Pro, and Pixel 11 Pro XL — here’s the one I recommend ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google’s latest hardware drop has officially arrived and, just like last year, consists of a trio of flagship models: the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a>, <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a>, and <a href="https://www.tomsguide.com/phones/samsung-phones/google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-which-android-flagship-will-be-the-better-choice">Pixel 11 Pro XL</a>. They all pack upgrades over their predecessors, including a first for the series: a <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Tensor G6</a> chip built on a new 2-nanometer manufacturing process.</p><p>That’s not all they share, either, because they all come with built-in <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-just-tried-the-pixelsnap-qi2-charging-stand-for-the-pixel-10-and-its-a-major-disappointment">Pixelsnap</a> magnetic wireless charging, refreshed IP68 dust and water resistance, and a suite of new AI features. Then there’s the matter of their pricing, with each model seeing a $100 price bump — which at this point is inevitable with most gadgets.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><p>I spent solid hands-on time checking out the trio, so I’ll tell you exactly what the base Pixel 11 lacks compared to the Pros. While the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> emerged as my recommendation last year, you might be surprised by which one gets my vote this time around.</p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-specifications"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Specifications</span></h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Google Pixel 11</strong></p></th><th  ><p><strong>Google Pixel 11 Pro</strong></p></th><th  ><p><strong>Google Pixel 11 Pro XL</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$899 / AU$1,499</p></td><td  ><p>$1,099 / AU$1,849</p></td><td  ><p>$1,299 / AU$2,099</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3-inch 1,080 x 2,424 Actua Display (OLED)</p></td><td  ><p>6.3-inch 1,280 x 2,856 Super Actua (OLED)</p></td><td  ><p>6.8-inch 1,344 x 2,992 Super Actua (OLED)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>60-120Hz</p></td><td  ><p>1-120Hz</p></td><td  ><p>1-120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td><td  ><p>12GB, 16GB</p></td><td  ><p>12GB, 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB</p></td><td  ><p>256GB, 512GB, 1TB</p></td><td  ><p>256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP (f/1.7) main, 13MP (f/2.2) ultrawide, 10.8MP (f/3.1) telephoto w/5x optical zoom</p></td><td  ><p>50MP (f/1.68) main, 48MP (f/1.7) ultrawide, 48MP (f/2.8) 5x telephoto</p></td><td  ><p>50MP (f/1.68) main, 48MP (f/1.7) ultrawide, 48MP (f/2.8) 5x telephoto</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>10.5MP (f/2.2)</p></td><td  ><p>42MP (f/2.2)</p></td><td  ><p>42MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,985 mAh</p></td><td  ><p>4,850 mAh</p></td><td  ><p>5,115 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speeds</strong></p></td><td  ><p>30W wired, 25W wireless</p></td><td  ><p>30W wired, 25W wireless</p></td><td  ><p>45W wired, 25W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Construction Rating</strong></p></td><td  ><p>IP68</p></td><td  ><p>IP68</p></td><td  ><p>IP68</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6 x 2.8 x 0.3 inches</p></td><td  ><p>6 x 2.8  x 0.3 inches</p></td><td  ><p>6.4  x 3 x 0.3 inches </p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>6.9 ounces / 197g</p></td><td  ><p>7.2 ounces / 204g</p></td><td  ><p>8 ounces / 226g</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Frost, Pistachio, Hibiscus, Obsidian</p></td><td  ><p>Canyon, Olive, Fog, Obsidian (matte)</p></td><td  ><p>Canyon, Olive, Fog, Obsidian (matte)</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-price-and-availability"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Price and availability</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4192px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tz7X2mBLxChtjfsg5nAkzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/tz7X2mBLxChtjfsg5nAkzf.jpg" mos="" align="middle" fullscreen="" width="4192" height="2358" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Yes, there’s a $100 price hike across all three models. That brings the starting price of the Pixel 11 to $899, while the Pixel 11 Pro and Pixel 11 Pro XL go for $1,099 and $1,299, respectively.</p><p>Meanwhile, Australian pricing for Google's new lineup starts at AU$1,499 for the Pixel 11, AU$1,849 for the Pixel 11 Pro and AU$2,099 for the Pixel 11 Pro XL. That works out to starting price increases of between AU$100-AU$200 depending on model.</p><p>While the price increase isn't surprising at this point, the Pixel 11 and Pixel 11 Pro do see their base storage upgraded to 256GB. Unfortunately, the Pixel 11 Pro XL doesn’t get the same upgrade boost, remaining at 256GB just as before. Preorders are live now, with all three officially hitting shelves on August 20.</p><p>Personally, I’m drawn more to the standard Pixel 11 colors because they’re much bolder and richer compared to the muted colorways of the Pro models. If I had to choose, Hibiscus is easily the standout option on the Pixel 11.</p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-design"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Design</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/jHskRTMrcqdyRp2ue5MRyf.jpg" alt="Google Pixel 11 hands-on." /><figcaption>Google Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/cEhh9GdnV8MghRdKQ8Q36g.jpg" alt="Google Pixel 11 hands-on." /><figcaption>Google Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/wvitGiz8Uh2yNwa9gnVzuf.jpg" alt="Google Pixel 11 hands-on." /><figcaption>Google Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>While all three phones sport the same signature look that made the previous lineup distinctive, I wouldn’t say there’s anything too different this time around apart from their colorways. Well, the Pixel 11’s camera cutout actually gets trimmed down by 40% — so when it’s paired with one of the new cases, the entire backside remains perfectly flat. The same can’t be said for the Pros, as their camera compartments still stick out.</p><p>The one big design addition on the Pros is the introduction of the HiLight LED on the back, which acts as a notification system for your contacts. Depending on who calls, you can set custom colors to coordinate with specific callers. It’ll also activate when you initiate Gemini, so you know it’s listening to your voice command.</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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Tjhq9hW9rpYFfxrLwyKxw5" name="Pixel 11 Pro and Pro XL - HiLight LED.GIF" alt="Pixel 11 Pro and Pro XL HiLight LED." src="https://cdn.mos.cms.futurecdn.net/Tjhq9hW9rpYFfxrLwyKxw5.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>It’s certainly a fresh hardware feature that’s great for quick glances when the phone is face down, but I feel it’s a bit gimmicky. At the same time, it doesn’t yet work with things outside of phone calls — like new text message notifications. I’m still a bit confused about why it’s here, especially when it doesn’t feel fully integrated into the experience.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/sSYrLScYBnAxaEKZuabVC.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gHUxNnw5WBTgnXAiqC2jB.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/qwdeqUyCDAQSYBR94Aw7A.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iVNEmmueNzFN5vbZ9igoS6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kgR8BvKsYeJnbbk3jYcFR6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KCzHKaC4ydhSRyCAfVGCR6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Despite this, I’ll admit that all three devices feel superb in the hand. The Pixel 11 opts for a polished glass back matched with a satin aluminum frame, while the Pros have a matte glass back paired with a polished frame. However, the Obsidian colorway on the Pixel 11 Pro and 11 Pro XL features a matte frame. Not only do they look premium, but they’re also plenty durable thanks to their drop resistance and IP68 ratings for dust and water protection.</p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-display"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Display</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/JdtLtWiVGky4e7iwbGNSyf.jpg" alt="Google Pixel 11 hands-on." /><figcaption>Google Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ei2pfC2HEzB3ndX5uzSL6.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ABuAPajgVZPJwVxsNoXWV6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Taking a look at the specs, there doesn’t appear to be much change to their displays. The Pixel 11 packs the same 6.3-inch Actua display as before and delivers the punchy visuals that make it ideal for watching videos.</p><p>Similarly, the Pixel 11 Pro and 11 Pro XL feature the same 6.3-inch and 6.8-inch Super Actua displays — which Google rates as its brightest ever at 3,600 nits, besting the previous year’s rating. It was hard to discern much of a difference when I loaded up the same HDR videos on YouTube, but I will admit that they’re gorgeous with their vibrant colors, wide viewing angles, and deep, pitch-black contrast.</p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-cameras"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Cameras</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5963px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4cLTAEnni5nnA4PKm7Kv9g" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/4cLTAEnni5nnA4PKm7Kv9g.jpg" mos="" align="middle" fullscreen="" width="5963" height="3354" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Just because the camera specs don’t look like a complete overhaul, you shouldn’t dismiss what Google is offering in its new Pixels. For starters, the Pixel 11 features a larger sensor on its main camera — which reportedly offers a 56% improvement in light sensitivity. This should make a substantial difference in action and low-light situations by capturing more light in the same amount of time. If that’s not enough, the 10.8MP telephoto camera with 5x optical zoom can now shoot even farther with support for up to 30x Super Zoom.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ZttrTjJfwzmaLmPcapUUA.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ug3i4WTZLM5XyrqjBZdoR6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Meanwhile, the Pixel 11 Pro and Pro XL get a new main camera sensor as well, while their 48MP telephoto shooter gets a larger sensor with 32% better light gathering, support for 5x Portrait Mode, and even farther reach with an updated 120x Pro Zoom. I got a demo of the latter with an Android figurine hidden across the room, resulting in a crisp shot that almost looked like I took it up close.</p><p>And since they’re powered by the new Tensor G6 chip, it unlocks even more powerful creative tools for serious shooters. Camera Looks are available to get your photo looking distinct right at the point of capture. Unlike standard photos that get processed after you press the shutter, Camera Looks preserve a specific look based on the aesthetic you choose. It sort of reminds me of LUTs (lookup tables) that color grade footage, and it can definitely elevate your photos.</p><p>The other intriguing feature powered by the Tensor G6 is Magic Capture. It’s a camera mode that intelligently analyzes frames to pull out high-quality still photos while recording video. It looked pretty impressive during a demo I saw of a pair of ballet dancers, delivering picture-perfect moments with clear facial expressions and great poses. </p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-performance"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Performance</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xK2kWC5uK2856nLKWT9eT6" name="Google Pixel 11 Pro XL hands-on" alt="Google Pixel 11 Pro XL hands-on." src="https://cdn.mos.cms.futurecdn.net/xK2kWC5uK2856nLKWT9eT6.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Powered by the new Google Tensor G6, every device in the Pixel 11 family feels snappy out of the gate. That’s crucial given how previous Tensor silicon has lagged behind competing flagship chips, making this year’s hardware a key proving ground.</p><p>Google claims the Tensor G6 boosts web browsing speeds by 25%, app launch times by 15%, and on-device AI execution by an impressive 3.5x. While it's impossible to fully evaluate those benchmarks during my quick preview, all three phones felt exceptionally fast and responsive in hand —  including how fast it processed videos with Magic Capture to find those perfect snapshots at full resolution.</p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-battery-and-charging"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Battery and charging</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/fEKFLgjfEoYjymrw5C2Qyf.jpg" alt="Google Pixel 11 hands-on." /><figcaption>Google Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hWirK6JDjuE9CbZh3XYUA.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5JNdF6dYDkWYmGh6AZ3PT6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Strangely enough, the Pixel 11 is the only model to gain a larger battery than its predecessor — packing a 4,985 mAh capacity. I suspect it’ll yield a noticeable improvement in endurance simply due to that larger capacity combined with its smaller screen and the power efficiency of the Tensor G6.</p><p>Conversely, the Pixel 11 Pro and Pixel 11 Pro XL actually feature slightly smaller capacities, coming in at 4,850 mAh and 5,115 mAh, respectively. Again, I think the reasoning here is that Google feels confident in the efficiency gains of its new silicon.</p><p>Even though the Pixel 11 Pro XL doesn’t gain any charging speed upgrades, its 45W wired and 25W Qi2.2 wireless charging speeds are still solid by today’s standards. I’m happy to report, though, that the Pixel 11 and Pixel 11 Pro are now treated to the same 25W Qi2.2 wireless charging speed as their top-tier sibling. </p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-software-and-ai"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Software and AI</span></h2><p>Shipping with <a href="https://www.tomsguide.com/phones/android-phones/android-17-changes-worth-paying-attention-to">Android 17</a> right out of the box, Google’s latest hardware puts <a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever">Gemini Intelligence</a> front and center. Powered by the Tensor G6 chip, on-device AI tasks process up to 3.5 times faster while using significantly less power.</p><p>Beyond context-aware cards across your apps and proactive lock screen insights, one standout addition in Android 17 that I found especially superb in action is <a href="https://www.tomsguide.com/phones/android-phones/android-17-io-2026-upgrades">Rambler</a> — a new Gemini-powered voice input feature in Gboard built for the way people actually speak. Instead of forcing you to speak without any mistakes, Rambler automatically filters out filler words like "um" and "ah," transforming your scattered dictations into clean, concise text on the fly.</p><p>Media creation and global communication get a massive boost, too. Android 17 taps into <a href="https://www.tomsguide.com/ai/gemini-omni-flash-can-create-and-edit-videos-with-your-voice-and-it-feels-like-the-future-of-multimodal-ai">Gemini Omni</a>, Google’s generative model that makes creating and editing video through natural conversation as seamless as editing a photo. I tried this out on an existing video by asking Gemini to swap out the logo of a bear for a chrome-looking pizza slice — and it did exactly that with impressive accuracy.</p><p>Meanwhile, Live Translate offers real-time, speech-to-speech translation that automatically dubs foreign-language videos, podcasts, and audio content directly into your preferred language. Google has focused heavily on AI over its last few generations, and this year’s suite convinces me that these are still the best AI phones on the market. </p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-outlook"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Outlook</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="X5g9xAFfFSkScdPn6jyaU6" name="Google Pixel 11 Pro XL hands-on" alt="Google Pixel 11 Pro XL hands-on." src="https://cdn.mos.cms.futurecdn.net/X5g9xAFfFSkScdPn6jyaU6.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>After getting hands-on time with all three, the Pixel 11 Pro emerges as my top recommendation because it strikes the ultimate sweet spot in Google's lineup. It offers the exact same flagship camera array as the Pixel 11 Pro XL (including 120x Pro Zoom and the upgraded main sensor), the brilliant 3,600-nit display, the ambient HiLight rear LED, and Google's full suite of Gemini AI capabilities.</p><p>On top of that, it gains faster 25W Qi2.2 wireless charging and double the starting storage at 256GB — all for $200 less than the XL. For most buyers, the standard Pro easily delivers the best value. Of course, my final verdict could shift once they're put through our rigorous lab testing, but for now, the Pixel 11 Pro leads the pack.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePavoW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePavoW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones"><strong>After 10 years of Pixels, why is Google still making phones?</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more"><strong>Made by Google event — how to watch and what to expect</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-and-iphone-18-pro-pre-order-date-just-tipped-heres-when-you-can-get-yours"><strong>iPhone Ultra and iPhone 18 Pro pre-order date just tipped — here's when you can get yours</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend</link>
                                                                            <description>
                            <![CDATA[ I spent some hands-on time with Pixel 11, Pixel 11 Pro, and Pixel 11 Pro XL, but there's one that emerges as my clear favorite pick. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">SH2eyXwDHvDr8M7pxqbvsF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6QUuxMLhyAjuMnSiTiNa2g-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 12 Aug 2026 14:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 13 Aug 2026 00:45:29 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.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/6QUuxMLhyAjuMnSiTiNa2g-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 hands-on.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6QUuxMLhyAjuMnSiTiNa2g-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google’s latest hardware drop has officially arrived and, just like last year, consists of a trio of flagship models: the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a>, <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a>, and <a href="https://www.tomsguide.com/phones/samsung-phones/google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-which-android-flagship-will-be-the-better-choice">Pixel 11 Pro XL</a>. They all pack upgrades over their predecessors, including a first for the series: a <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Tensor G6</a> chip built on a new 2-nanometer manufacturing process.</p><p>That’s not all they share, either, because they all come with built-in <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-just-tried-the-pixelsnap-qi2-charging-stand-for-the-pixel-10-and-its-a-major-disappointment">Pixelsnap</a> magnetic wireless charging, refreshed IP68 dust and water resistance, and a suite of new AI features. Then there’s the matter of their pricing, with each model seeing a $100 price bump — which at this point is inevitable with most gadgets.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><p>I spent solid hands-on time checking out the trio, so I’ll tell you exactly what the base Pixel 11 lacks compared to the Pros. While the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> emerged as my recommendation last year, you might be surprised by which one gets my vote this time around.</p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-specifications"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Specifications</span></h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Google Pixel 11</strong></p></th><th  ><p><strong>Google Pixel 11 Pro</strong></p></th><th  ><p><strong>Google Pixel 11 Pro XL</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$899 / AU$1,499</p></td><td  ><p>$1,099 / AU$1,849</p></td><td  ><p>$1,299 / AU$2,099</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3-inch 1,080 x 2,424 Actua Display (OLED)</p></td><td  ><p>6.3-inch 1,280 x 2,856 Super Actua (OLED)</p></td><td  ><p>6.8-inch 1,344 x 2,992 Super Actua (OLED)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>60-120Hz</p></td><td  ><p>1-120Hz</p></td><td  ><p>1-120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td><td  ><p>12GB, 16GB</p></td><td  ><p>12GB, 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB</p></td><td  ><p>256GB, 512GB, 1TB</p></td><td  ><p>256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP (f/1.7) main, 13MP (f/2.2) ultrawide, 10.8MP (f/3.1) telephoto w/5x optical zoom</p></td><td  ><p>50MP (f/1.68) main, 48MP (f/1.7) ultrawide, 48MP (f/2.8) 5x telephoto</p></td><td  ><p>50MP (f/1.68) main, 48MP (f/1.7) ultrawide, 48MP (f/2.8) 5x telephoto</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>10.5MP (f/2.2)</p></td><td  ><p>42MP (f/2.2)</p></td><td  ><p>42MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,985 mAh</p></td><td  ><p>4,850 mAh</p></td><td  ><p>5,115 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speeds</strong></p></td><td  ><p>30W wired, 25W wireless</p></td><td  ><p>30W wired, 25W wireless</p></td><td  ><p>45W wired, 25W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Construction Rating</strong></p></td><td  ><p>IP68</p></td><td  ><p>IP68</p></td><td  ><p>IP68</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6 x 2.8 x 0.3 inches</p></td><td  ><p>6 x 2.8  x 0.3 inches</p></td><td  ><p>6.4  x 3 x 0.3 inches </p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>6.9 ounces / 197g</p></td><td  ><p>7.2 ounces / 204g</p></td><td  ><p>8 ounces / 226g</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Frost, Pistachio, Hibiscus, Obsidian</p></td><td  ><p>Canyon, Olive, Fog, Obsidian (matte)</p></td><td  ><p>Canyon, Olive, Fog, Obsidian (matte)</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-price-and-availability"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Price and availability</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4192px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tz7X2mBLxChtjfsg5nAkzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/tz7X2mBLxChtjfsg5nAkzf.jpg" mos="" align="middle" fullscreen="" width="4192" height="2358" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Yes, there’s a $100 price hike across all three models. That brings the starting price of the Pixel 11 to $899, while the Pixel 11 Pro and Pixel 11 Pro XL go for $1,099 and $1,299, respectively.</p><p>Meanwhile, Australian pricing for Google's new lineup starts at AU$1,499 for the Pixel 11, AU$1,849 for the Pixel 11 Pro and AU$2,099 for the Pixel 11 Pro XL. That works out to starting price increases of between AU$100-AU$200 depending on model.</p><p>While the price increase isn't surprising at this point, the Pixel 11 and Pixel 11 Pro do see their base storage upgraded to 256GB. Unfortunately, the Pixel 11 Pro XL doesn’t get the same upgrade boost, remaining at 256GB just as before. Preorders are live now, with all three officially hitting shelves on August 20.</p><p>Personally, I’m drawn more to the standard Pixel 11 colors because they’re much bolder and richer compared to the muted colorways of the Pro models. If I had to choose, Hibiscus is easily the standout option on the Pixel 11.</p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-design"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Design</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/jHskRTMrcqdyRp2ue5MRyf.jpg" alt="Google Pixel 11 hands-on." /><figcaption>Google Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/cEhh9GdnV8MghRdKQ8Q36g.jpg" alt="Google Pixel 11 hands-on." /><figcaption>Google Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/wvitGiz8Uh2yNwa9gnVzuf.jpg" alt="Google Pixel 11 hands-on." /><figcaption>Google Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>While all three phones sport the same signature look that made the previous lineup distinctive, I wouldn’t say there’s anything too different this time around apart from their colorways. Well, the Pixel 11’s camera cutout actually gets trimmed down by 40% — so when it’s paired with one of the new cases, the entire backside remains perfectly flat. The same can’t be said for the Pros, as their camera compartments still stick out.</p><p>The one big design addition on the Pros is the introduction of the HiLight LED on the back, which acts as a notification system for your contacts. Depending on who calls, you can set custom colors to coordinate with specific callers. It’ll also activate when you initiate Gemini, so you know it’s listening to your voice command.</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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Tjhq9hW9rpYFfxrLwyKxw5" name="Pixel 11 Pro and Pro XL - HiLight LED.GIF" alt="Pixel 11 Pro and Pro XL HiLight LED." src="https://cdn.mos.cms.futurecdn.net/Tjhq9hW9rpYFfxrLwyKxw5.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>It’s certainly a fresh hardware feature that’s great for quick glances when the phone is face down, but I feel it’s a bit gimmicky. At the same time, it doesn’t yet work with things outside of phone calls — like new text message notifications. I’m still a bit confused about why it’s here, especially when it doesn’t feel fully integrated into the experience.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/sSYrLScYBnAxaEKZuabVC.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gHUxNnw5WBTgnXAiqC2jB.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/qwdeqUyCDAQSYBR94Aw7A.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iVNEmmueNzFN5vbZ9igoS6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kgR8BvKsYeJnbbk3jYcFR6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KCzHKaC4ydhSRyCAfVGCR6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Despite this, I’ll admit that all three devices feel superb in the hand. The Pixel 11 opts for a polished glass back matched with a satin aluminum frame, while the Pros have a matte glass back paired with a polished frame. However, the Obsidian colorway on the Pixel 11 Pro and 11 Pro XL features a matte frame. Not only do they look premium, but they’re also plenty durable thanks to their drop resistance and IP68 ratings for dust and water protection.</p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-display"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Display</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/JdtLtWiVGky4e7iwbGNSyf.jpg" alt="Google Pixel 11 hands-on." /><figcaption>Google Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ei2pfC2HEzB3ndX5uzSL6.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ABuAPajgVZPJwVxsNoXWV6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Taking a look at the specs, there doesn’t appear to be much change to their displays. The Pixel 11 packs the same 6.3-inch Actua display as before and delivers the punchy visuals that make it ideal for watching videos.</p><p>Similarly, the Pixel 11 Pro and 11 Pro XL feature the same 6.3-inch and 6.8-inch Super Actua displays — which Google rates as its brightest ever at 3,600 nits, besting the previous year’s rating. It was hard to discern much of a difference when I loaded up the same HDR videos on YouTube, but I will admit that they’re gorgeous with their vibrant colors, wide viewing angles, and deep, pitch-black contrast.</p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-cameras"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Cameras</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5963px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4cLTAEnni5nnA4PKm7Kv9g" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/4cLTAEnni5nnA4PKm7Kv9g.jpg" mos="" align="middle" fullscreen="" width="5963" height="3354" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Just because the camera specs don’t look like a complete overhaul, you shouldn’t dismiss what Google is offering in its new Pixels. For starters, the Pixel 11 features a larger sensor on its main camera — which reportedly offers a 56% improvement in light sensitivity. This should make a substantial difference in action and low-light situations by capturing more light in the same amount of time. If that’s not enough, the 10.8MP telephoto camera with 5x optical zoom can now shoot even farther with support for up to 30x Super Zoom.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ZttrTjJfwzmaLmPcapUUA.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ug3i4WTZLM5XyrqjBZdoR6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Meanwhile, the Pixel 11 Pro and Pro XL get a new main camera sensor as well, while their 48MP telephoto shooter gets a larger sensor with 32% better light gathering, support for 5x Portrait Mode, and even farther reach with an updated 120x Pro Zoom. I got a demo of the latter with an Android figurine hidden across the room, resulting in a crisp shot that almost looked like I took it up close.</p><p>And since they’re powered by the new Tensor G6 chip, it unlocks even more powerful creative tools for serious shooters. Camera Looks are available to get your photo looking distinct right at the point of capture. Unlike standard photos that get processed after you press the shutter, Camera Looks preserve a specific look based on the aesthetic you choose. It sort of reminds me of LUTs (lookup tables) that color grade footage, and it can definitely elevate your photos.</p><p>The other intriguing feature powered by the Tensor G6 is Magic Capture. It’s a camera mode that intelligently analyzes frames to pull out high-quality still photos while recording video. It looked pretty impressive during a demo I saw of a pair of ballet dancers, delivering picture-perfect moments with clear facial expressions and great poses. </p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-performance"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Performance</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xK2kWC5uK2856nLKWT9eT6" name="Google Pixel 11 Pro XL hands-on" alt="Google Pixel 11 Pro XL hands-on." src="https://cdn.mos.cms.futurecdn.net/xK2kWC5uK2856nLKWT9eT6.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Powered by the new Google Tensor G6, every device in the Pixel 11 family feels snappy out of the gate. That’s crucial given how previous Tensor silicon has lagged behind competing flagship chips, making this year’s hardware a key proving ground.</p><p>Google claims the Tensor G6 boosts web browsing speeds by 25%, app launch times by 15%, and on-device AI execution by an impressive 3.5x. While it's impossible to fully evaluate those benchmarks during my quick preview, all three phones felt exceptionally fast and responsive in hand —  including how fast it processed videos with Magic Capture to find those perfect snapshots at full resolution.</p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-battery-and-charging"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Battery and charging</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/fEKFLgjfEoYjymrw5C2Qyf.jpg" alt="Google Pixel 11 hands-on." /><figcaption>Google Pixel 11.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hWirK6JDjuE9CbZh3XYUA.jpg" alt="Google Pixel 11 Pro hands-on." /><figcaption>Google Pixel 11 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5JNdF6dYDkWYmGh6AZ3PT6.jpg" alt="Google Pixel 11 Pro XL hands-on." /><figcaption>Google Pixel 11 Pro XL.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Strangely enough, the Pixel 11 is the only model to gain a larger battery than its predecessor — packing a 4,985 mAh capacity. I suspect it’ll yield a noticeable improvement in endurance simply due to that larger capacity combined with its smaller screen and the power efficiency of the Tensor G6.</p><p>Conversely, the Pixel 11 Pro and Pixel 11 Pro XL actually feature slightly smaller capacities, coming in at 4,850 mAh and 5,115 mAh, respectively. Again, I think the reasoning here is that Google feels confident in the efficiency gains of its new silicon.</p><p>Even though the Pixel 11 Pro XL doesn’t gain any charging speed upgrades, its 45W wired and 25W Qi2.2 wireless charging speeds are still solid by today’s standards. I’m happy to report, though, that the Pixel 11 and Pixel 11 Pro are now treated to the same 25W Qi2.2 wireless charging speed as their top-tier sibling. </p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-software-and-ai"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Software and AI</span></h2><p>Shipping with <a href="https://www.tomsguide.com/phones/android-phones/android-17-changes-worth-paying-attention-to">Android 17</a> right out of the box, Google’s latest hardware puts <a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever">Gemini Intelligence</a> front and center. Powered by the Tensor G6 chip, on-device AI tasks process up to 3.5 times faster while using significantly less power.</p><p>Beyond context-aware cards across your apps and proactive lock screen insights, one standout addition in Android 17 that I found especially superb in action is <a href="https://www.tomsguide.com/phones/android-phones/android-17-io-2026-upgrades">Rambler</a> — a new Gemini-powered voice input feature in Gboard built for the way people actually speak. Instead of forcing you to speak without any mistakes, Rambler automatically filters out filler words like "um" and "ah," transforming your scattered dictations into clean, concise text on the fly.</p><p>Media creation and global communication get a massive boost, too. Android 17 taps into <a href="https://www.tomsguide.com/ai/gemini-omni-flash-can-create-and-edit-videos-with-your-voice-and-it-feels-like-the-future-of-multimodal-ai">Gemini Omni</a>, Google’s generative model that makes creating and editing video through natural conversation as seamless as editing a photo. I tried this out on an existing video by asking Gemini to swap out the logo of a bear for a chrome-looking pizza slice — and it did exactly that with impressive accuracy.</p><p>Meanwhile, Live Translate offers real-time, speech-to-speech translation that automatically dubs foreign-language videos, podcasts, and audio content directly into your preferred language. Google has focused heavily on AI over its last few generations, and this year’s suite convinces me that these are still the best AI phones on the market. </p><h2 class="article-body__section" id="section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-outlook"><span>Pixel 11 vs. Pixel 11 Pro vs. Pixel 11 Pro XL: Outlook</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="X5g9xAFfFSkScdPn6jyaU6" name="Google Pixel 11 Pro XL hands-on" alt="Google Pixel 11 Pro XL hands-on." src="https://cdn.mos.cms.futurecdn.net/X5g9xAFfFSkScdPn6jyaU6.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>After getting hands-on time with all three, the Pixel 11 Pro emerges as my top recommendation because it strikes the ultimate sweet spot in Google's lineup. It offers the exact same flagship camera array as the Pixel 11 Pro XL (including 120x Pro Zoom and the upgraded main sensor), the brilliant 3,600-nit display, the ambient HiLight rear LED, and Google's full suite of Gemini AI capabilities.</p><p>On top of that, it gains faster 25W Qi2.2 wireless charging and double the starting storage at 256GB — all for $200 less than the XL. For most buyers, the standard Pro easily delivers the best value. Of course, my final verdict could shift once they're put through our rigorous lab testing, but for now, the Pixel 11 Pro leads the pack.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePavoW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePavoW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones"><strong>After 10 years of Pixels, why is Google still making phones?</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more"><strong>Made by Google event — how to watch and what to expect</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-and-iphone-18-pro-pre-order-date-just-tipped-heres-when-you-can-get-yours"><strong>iPhone Ultra and iPhone 18 Pro pre-order date just tipped — here's when you can get yours</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tried the Pixel 11 Pro Fold and it's more 'Ultra' than Samsung's foldable (for $200 less) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It’s easy to write off the Pixel 11 Pro Fold when Samsung has the shiny new wide Fold 8. But Google’s new foldable phone is more of a direct competitor to the Fold 8 Ultra. It’s for people who actually want bigger and taller displays.</p><p>And you could argue that the Pixel 11 Pro Fold ($1,899 / AU$2,799) is an even better value. It’s not just $200 cheaper than the Ultra. It has a brighter display, better durability and even smarter AI features. </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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><p>I went hands on with the new Pixel 11 Pro Fold and came away pretty impressed with its upgrades — with the exception of the gimmicky HiLight. Here’s how it stacks up.</p><h3 class="article-body__section" id="section-pixel-11-pro-fold-specs"><span>Pixel 11 Pro Fold specs</span></h3><div ><table><tbody><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>6.5 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong></p></td><td  ><p>8.0 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Chip</strong></p></td><td  ><p>Google Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP wide, 10.5MP ultrawide with Macro Focus, 10.8MP 5x telephoto (up to 30x Super Zoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie cameras</strong></p></td><td  ><p>10MP (inner), 10MP (cover)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,806 mAh typical (4,658 mAh minimum)</p></td></tr><tr><td class="firstcol " ><p><strong>Wired/Wireless Charging</strong></p></td><td  ><p>30W, 25W</p></td></tr><tr><td class="firstcol " ><p><strong>Size open</strong></p></td><td  ><p>155.2 × 150.4 × 5.0 mm (6.1 × 5.9 × 0.2 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Size closed</strong></p></td><td  ><p>155.2 × 76.0 × 10.1 mm (6.1 × 3.0 × 0.4 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>239 grams (8.4 ounces)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Obsidian, Olive</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-price-and-release-date-100-hike"><span>Price and release date: $100 Hike</span></h3><p>At $1,899 / AU$2,799, the Pixel 11 Pro Fold is $100 more than its predecessor and the same exact price as the Galaxy Z Fold 8. Pre-orders are available now and the Pixel 11 Pro Fold release date is August 20.</p><h3 class="article-body__section" id="section-design-tough-and-comfy-but-still-kinda-bulky"><span>Design: Tough and comfy, but still kinda bulky</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4415px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vo9DBLosyFvZmvBS4QAY6b" name="Google Pixel 11 Pro Fold-16" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/vo9DBLosyFvZmvBS4QAY6b.jpg" mos="" align="middle" fullscreen="" width="4415" height="2483" 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>Right off the bat, I prefer the Pixel 11 Pro Fold to the Galaxy Z Fold 8 Ultra because its front 6.5-inch screen is less squished. There’s more room for typing and your apps, thanks in part to Google slimming down the bezels. </p><p>I also appreciate the rounded corners on this design. They dig into your hands less than the Fold 8 Ultra's pointy corners.</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:3030px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="g6xyThLUCUzvgR46syPA4b" name="Google Pixel 11 Pro Fold-2" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/g6xyThLUCUzvgR46syPA4b.jpg" mos="" align="middle" fullscreen="" width="3030" height="1704" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Google Pixel 11 Pro Fold and Samsung Galaxy Z Fold 8 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Pick these phones up though and you’ll immediately notice Samsung’s portability and thinness advantage. The Pixel 11 Pro Fold is a hefty 8.4 ounces and measures 5mm thick when open and 10.1mm when closed. That’s a definitive improvement over the Pixel 10 Pro Fold (9.1 ounces, 5.2mm/10.8mm), but the Fold 8 Ultra is still the featherweight champ of big screen foldables.</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:4733px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="zuwjc6dCyBhA5VjLjLWxQb" name="Google Pixel 11 Pro Fold-7" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/zuwjc6dCyBhA5VjLjLWxQb.jpg" mos="" align="middle" fullscreen="" width="4733" height="2662" 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>What Google gives you is more durability. Not only is this phone IP68 rated against water and dust — it’s just water for Samsung — Google gave the back a glass composite back that’s shatterproof. </p><p>The color options are Obsidian and Olive and the latter is the one I’d get because it’s a lot more fun.</p><h3 class="article-body__section" id="section-hilight-or-lowlight"><span>HiLight (or LowLight?)</span></h3><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="o5G3WLD8KmHkN7UmTPVCKb" name="Google Pixel 11 Pro Fold-21" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/o5G3WLD8KmHkN7UmTPVCKb.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: Tom's Guide)</span></figcaption></figure><p>I can’t quite make up my mind if this feature is cool or just gimmicky but right now I’m thinking more of the latter. </p><p>HiLight is colorful LED on the back of the Pixel 11 Pro Fold that can glow different colors you set based on who’s calling. So if your phone is face down you can tell right away who’s on the other end.</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:3017px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yDMEqjq8skfgrJDuFyMxaa" name="Google Pixel 11 Pro Fold-20" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/yDMEqjq8skfgrJDuFyMxaa.jpg" mos="" align="middle" fullscreen="" width="3017" height="1697" 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 HiLight can also animate when you’re chatting with Gemini Live, which I guess is cool but not really necessary.</p><h3 class="article-body__section" id="section-displays-brightest-ever"><span>Displays: Brightest ever </span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/RuS339tv62jjRaVhiNzxHP.jpg" alt="Pixel 11 Pro Fold hands on" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/g6xyThLUCUzvgR46syPA4b.jpg" alt="Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Google’s foldable has a more noticeable crease than Samsung, but both the main and cover display are super bright. We’re talking 3,600 nits for the Pixel 11 Pro Fold, compared to 3,000 for the Fold 8 Ultra. </p><p>And, I noticed the difference when I put both phones side by side, both set to max brightness. The black bars are very much there when watching YouTube, but I like how you can pop comments in on the right side while watching YouTube Shorts. </p><p>The Pixel Pro Fold also has a laptop mode that puts the content up and controls on the bottom, similar to the Flex Mode on the Fold 8 Ultra.</p><h3 class="article-body__section" id="section-multitasking-bubbles-everywhere"><span>Multitasking: Bubbles everywhere!</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6480px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XjCPwwPFGrqJY7AzWBNQvb" name="Google Pixel 11 Pro Fold-12" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/XjCPwwPFGrqJY7AzWBNQvb.jpg" mos="" align="middle" fullscreen="" width="6480" height="3645" 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>While the Pixel 11 Pro Fold limits you to two open apps side by side, compared to three for Samsung, Google has a new trick up its sleeve.</p><p>You can turn apps into a floating window called bubbles and place them anywhere around the screen. And it’s simple to add more apps to your bubble and toggle between them.</p><h3 class="article-body__section" id="section-cameras-more-light-more-magic"><span>Cameras: More light, more 'magic'</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5520px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pFWzirrCBocpH8HZaRUzcb" name="Google Pixel 11 Pro Fold-11" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/pFWzirrCBocpH8HZaRUzcb.jpg" mos="" align="middle" fullscreen="" width="5520" height="3105" 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 Pixel 11 Pro Fold packs a triple rear camera system that starts with a 48MP wide sensor that lets in 58% more light. </p><p>In my very brief testing the Pixel 11 Pro Fold captured sharp and bright images, but this was under pretty ideal conditions.</p><p>You also get a 10.5MP ultra wide camera and a 10.8MP telephoto camera with 5x optical zoom, compared to just 3x for the Fold 8 Ultra.</p><p>The selfie cameras are limited to 10MP, but you can always take rear camera selfies by flipped the front display around for maximum resolution.</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:3257px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uwQ3uwNLhs4AdabrDy5yFP" name="Google Pixel 11 Pro Fold" alt="Pixel 11 Pro Fold hands on" src="https://cdn.mos.cms.futurecdn.net/uwQ3uwNLhs4AdabrDy5yFP.jpg" mos="" align="middle" fullscreen="" width="3257" height="1832" 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 coolest camera feature on the Pixel 11 Pro Fold is Magic Capture. Enter this special mode and press the shutter button, and the Pixel 11 Pro will automatically start shooting both photos and videos, picking out what it thinks are the best moments. Google had a couple of dancers for our demo and Magic Capture seemed to work pretty well.</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:3061px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="gHHVn2Hv7hqwZcsEKi9UZh" name="Google Pixel 11 Pro Fold-8" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/gHHVn2Hv7hqwZcsEKi9UZh.jpg" mos="" align="middle" fullscreen="" width="3061" height="1722" 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>Another nifty feature is Creative Studio, which you can use to record videos complete with a built-in teleprompter, sound level controls and more.</p><h3 class="article-body__section" id="section-ai-getting-pro-active"><span>AI: Getting Pro-active</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2300px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Pv9At59u68QQSriwKhhrha" name="Google Pixel 11 Pro Fold-18" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/Pv9At59u68QQSriwKhhrha.jpg" mos="" align="middle" fullscreen="" width="2300" height="1294" 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 Pixel phone so you know the 11 Pro Fold is going to have a boatload of AI features. But there’s a handful of useful ones that you won’t find on the Fold 8 Ultra. </p><p>Gemini Spark can perform tasks on your behalf in the background while you do other stuff. For example, you can ask Gemini to summarize emails related to your party RSVPs and have it create a spreadsheet of everyone’s dietary preferences.</p><p>Speech recognition also gets a boost with the Pixel 11 Pro Fold thanks to Rambler. You can say all the “uhs” and “ums” you want and this Foldable will edit them out on the fly.</p><p>Gemini’s Proactive Intelligent Suggestions builds on the hit-or-miss Magic Cue from previous Pixel phones, surfacing the right info just when you need it. For example, if someone asks if you’re available on a certain day and time, you’ll see a prompt for previewing your calendar — without having to leave the app.</p><p>This works for everything from being able to preview flight info to peeking at a restaurant. You can even book a table from within your messages with the tap of a button.</p><h3 class="article-body__section" id="section-performance-and-battery-breaking-the-2nm-barrier"><span>Performance and Battery: Breaking the 2nm barrier</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4803px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="G85rY5T6RpMtNN8XHTYVSb" name="Google Pixel 11 Pro Fold-LIST2" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/G85rY5T6RpMtNN8XHTYVSb.jpg" mos="" align="middle" fullscreen="" width="4803" height="2702" 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 Pixel 11 Pro packs a new Tensor G6 chip that is among the first in the world built on a 2nm process. And that means you should expect a speed boost along with longer battery life — even with a smaller battery than the Pixel 10 Pro Fold.</p><p>For example, Google promises an Instant Night Sight feature for taking low-light photos with virtually no processing time. But we’ll have to test this out to see how it works.</p><p>And with a much faster TPU on board, the Pixel 11 Pro Fold should be able to perform on-device AI tasks much faster than before.</p><p>The 4,806 mAh battery inside the Pixel 11 Pro Fold is smaller than the 5,000 mAh battery for the Pixel 10 Pro Fold, but Google is still promising up to 24 hours of battery life. That’s because the G6 chip is designed to be 20% more efficient.</p><p>However, the Galaxy Z Fold 8 has a 5,015 mAh battery with newer silicon carbon tech, while the Pixel Fold is still stuck on Lithium Ion, so we’ll have to see which foldable lasts longer.</p><p>When it comes to wireless charging, Google has an advantage because it has Qi2 magnets built into the phone. With Samsung you have to buy a case.</p><h3 class="article-body__section" id="section-outlook"><span>Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5893px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Ypss5gjgWtC9BhKtQQBieb" name="Google Pixel 11 Pro Fold-17" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/Ypss5gjgWtC9BhKtQQBieb.jpg" mos="" align="middle" fullscreen="" width="5893" height="3315" 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 Pixel 11 Pro Fold is a much improved foldable phone. It’s lighter, thinner, tougher and faster. Plus, it has a longer zoom than the Z Fold 8 Ultra, a wider front display and — eureka! — you can actually take it to the beach.</p><p>Add in the brighter screens and shatterproof back and you have some pretty solid reasons for picking the Pixel 11 Pro Fold over Samsung.</p><p>On the other hand, the Galaxy Z Fold 8 Ultra is noticeably thinner and lighter; it has a less visible crease; and it packs sharper main and ultrawide cameras. Plus, you have the ability to run three apps at once.</p><p>I don’t see the HiLight feature being all that useful on the Pixel 11 Pro Fold. More practical to me are Gemini proactive suggestions, as well as camera features like Magic Capture.</p><p>Overall, I’d be pretty torn between the Pixel 11 Pro Fold and Galaxy Z Fold 8 Ultra. But I’ll have to do some in-depth testing to see which one I’d buy with my own money. Stay tuned for my full review.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less</link>
                                                                            <description>
                            <![CDATA[ The Pixel 11 Pro Fold isn’t as thin or light as the Galaxy Z Fold 8 Ultra, but based on my hands-on impressions it has brighter displays, better durability and smarter AI features for $200 less. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">B8SZdYfWGW59P8f8RAHKWh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/N92pGWg5dEhTHEgNuCx7NZ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 12 Aug 2026 14:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 13 Aug 2026 01:34:11 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Google Gemini]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                    <category><![CDATA[AI]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;&lt;p&gt;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. &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. &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/N92pGWg5dEhTHEgNuCx7NZ-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 Pro Fold shown open and closed]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 Pro Fold shown open and closed]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 Pro Fold shown open and closed]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/N92pGWg5dEhTHEgNuCx7NZ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It’s easy to write off the Pixel 11 Pro Fold when Samsung has the shiny new wide Fold 8. But Google’s new foldable phone is more of a direct competitor to the Fold 8 Ultra. It’s for people who actually want bigger and taller displays.</p><p>And you could argue that the Pixel 11 Pro Fold ($1,899 / AU$2,799) is an even better value. It’s not just $200 cheaper than the Ultra. It has a brighter display, better durability and even smarter AI features. </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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><p>I went hands on with the new Pixel 11 Pro Fold and came away pretty impressed with its upgrades — with the exception of the gimmicky HiLight. Here’s how it stacks up.</p><h3 class="article-body__section" id="section-pixel-11-pro-fold-specs"><span>Pixel 11 Pro Fold specs</span></h3><div ><table><tbody><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>6.5 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong></p></td><td  ><p>8.0 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Chip</strong></p></td><td  ><p>Google Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP wide, 10.5MP ultrawide with Macro Focus, 10.8MP 5x telephoto (up to 30x Super Zoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie cameras</strong></p></td><td  ><p>10MP (inner), 10MP (cover)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,806 mAh typical (4,658 mAh minimum)</p></td></tr><tr><td class="firstcol " ><p><strong>Wired/Wireless Charging</strong></p></td><td  ><p>30W, 25W</p></td></tr><tr><td class="firstcol " ><p><strong>Size open</strong></p></td><td  ><p>155.2 × 150.4 × 5.0 mm (6.1 × 5.9 × 0.2 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Size closed</strong></p></td><td  ><p>155.2 × 76.0 × 10.1 mm (6.1 × 3.0 × 0.4 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>239 grams (8.4 ounces)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Obsidian, Olive</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-price-and-release-date-100-hike"><span>Price and release date: $100 Hike</span></h3><p>At $1,899 / AU$2,799, the Pixel 11 Pro Fold is $100 more than its predecessor and the same exact price as the Galaxy Z Fold 8. Pre-orders are available now and the Pixel 11 Pro Fold release date is August 20.</p><h3 class="article-body__section" id="section-design-tough-and-comfy-but-still-kinda-bulky"><span>Design: Tough and comfy, but still kinda bulky</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4415px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vo9DBLosyFvZmvBS4QAY6b" name="Google Pixel 11 Pro Fold-16" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/vo9DBLosyFvZmvBS4QAY6b.jpg" mos="" align="middle" fullscreen="" width="4415" height="2483" 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>Right off the bat, I prefer the Pixel 11 Pro Fold to the Galaxy Z Fold 8 Ultra because its front 6.5-inch screen is less squished. There’s more room for typing and your apps, thanks in part to Google slimming down the bezels. </p><p>I also appreciate the rounded corners on this design. They dig into your hands less than the Fold 8 Ultra's pointy corners.</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:3030px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="g6xyThLUCUzvgR46syPA4b" name="Google Pixel 11 Pro Fold-2" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/g6xyThLUCUzvgR46syPA4b.jpg" mos="" align="middle" fullscreen="" width="3030" height="1704" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Google Pixel 11 Pro Fold and Samsung Galaxy Z Fold 8 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Pick these phones up though and you’ll immediately notice Samsung’s portability and thinness advantage. The Pixel 11 Pro Fold is a hefty 8.4 ounces and measures 5mm thick when open and 10.1mm when closed. That’s a definitive improvement over the Pixel 10 Pro Fold (9.1 ounces, 5.2mm/10.8mm), but the Fold 8 Ultra is still the featherweight champ of big screen foldables.</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:4733px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="zuwjc6dCyBhA5VjLjLWxQb" name="Google Pixel 11 Pro Fold-7" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/zuwjc6dCyBhA5VjLjLWxQb.jpg" mos="" align="middle" fullscreen="" width="4733" height="2662" 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>What Google gives you is more durability. Not only is this phone IP68 rated against water and dust — it’s just water for Samsung — Google gave the back a glass composite back that’s shatterproof. </p><p>The color options are Obsidian and Olive and the latter is the one I’d get because it’s a lot more fun.</p><h3 class="article-body__section" id="section-hilight-or-lowlight"><span>HiLight (or LowLight?)</span></h3><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="o5G3WLD8KmHkN7UmTPVCKb" name="Google Pixel 11 Pro Fold-21" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/o5G3WLD8KmHkN7UmTPVCKb.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: Tom's Guide)</span></figcaption></figure><p>I can’t quite make up my mind if this feature is cool or just gimmicky but right now I’m thinking more of the latter. </p><p>HiLight is colorful LED on the back of the Pixel 11 Pro Fold that can glow different colors you set based on who’s calling. So if your phone is face down you can tell right away who’s on the other end.</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:3017px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yDMEqjq8skfgrJDuFyMxaa" name="Google Pixel 11 Pro Fold-20" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/yDMEqjq8skfgrJDuFyMxaa.jpg" mos="" align="middle" fullscreen="" width="3017" height="1697" 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 HiLight can also animate when you’re chatting with Gemini Live, which I guess is cool but not really necessary.</p><h3 class="article-body__section" id="section-displays-brightest-ever"><span>Displays: Brightest ever </span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/RuS339tv62jjRaVhiNzxHP.jpg" alt="Pixel 11 Pro Fold hands on" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/g6xyThLUCUzvgR46syPA4b.jpg" alt="Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Google’s foldable has a more noticeable crease than Samsung, but both the main and cover display are super bright. We’re talking 3,600 nits for the Pixel 11 Pro Fold, compared to 3,000 for the Fold 8 Ultra. </p><p>And, I noticed the difference when I put both phones side by side, both set to max brightness. The black bars are very much there when watching YouTube, but I like how you can pop comments in on the right side while watching YouTube Shorts. </p><p>The Pixel Pro Fold also has a laptop mode that puts the content up and controls on the bottom, similar to the Flex Mode on the Fold 8 Ultra.</p><h3 class="article-body__section" id="section-multitasking-bubbles-everywhere"><span>Multitasking: Bubbles everywhere!</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6480px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XjCPwwPFGrqJY7AzWBNQvb" name="Google Pixel 11 Pro Fold-12" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/XjCPwwPFGrqJY7AzWBNQvb.jpg" mos="" align="middle" fullscreen="" width="6480" height="3645" 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>While the Pixel 11 Pro Fold limits you to two open apps side by side, compared to three for Samsung, Google has a new trick up its sleeve.</p><p>You can turn apps into a floating window called bubbles and place them anywhere around the screen. And it’s simple to add more apps to your bubble and toggle between them.</p><h3 class="article-body__section" id="section-cameras-more-light-more-magic"><span>Cameras: More light, more 'magic'</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5520px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pFWzirrCBocpH8HZaRUzcb" name="Google Pixel 11 Pro Fold-11" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/pFWzirrCBocpH8HZaRUzcb.jpg" mos="" align="middle" fullscreen="" width="5520" height="3105" 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 Pixel 11 Pro Fold packs a triple rear camera system that starts with a 48MP wide sensor that lets in 58% more light. </p><p>In my very brief testing the Pixel 11 Pro Fold captured sharp and bright images, but this was under pretty ideal conditions.</p><p>You also get a 10.5MP ultra wide camera and a 10.8MP telephoto camera with 5x optical zoom, compared to just 3x for the Fold 8 Ultra.</p><p>The selfie cameras are limited to 10MP, but you can always take rear camera selfies by flipped the front display around for maximum resolution.</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:3257px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uwQ3uwNLhs4AdabrDy5yFP" name="Google Pixel 11 Pro Fold" alt="Pixel 11 Pro Fold hands on" src="https://cdn.mos.cms.futurecdn.net/uwQ3uwNLhs4AdabrDy5yFP.jpg" mos="" align="middle" fullscreen="" width="3257" height="1832" 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 coolest camera feature on the Pixel 11 Pro Fold is Magic Capture. Enter this special mode and press the shutter button, and the Pixel 11 Pro will automatically start shooting both photos and videos, picking out what it thinks are the best moments. Google had a couple of dancers for our demo and Magic Capture seemed to work pretty well.</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:3061px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="gHHVn2Hv7hqwZcsEKi9UZh" name="Google Pixel 11 Pro Fold-8" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/gHHVn2Hv7hqwZcsEKi9UZh.jpg" mos="" align="middle" fullscreen="" width="3061" height="1722" 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>Another nifty feature is Creative Studio, which you can use to record videos complete with a built-in teleprompter, sound level controls and more.</p><h3 class="article-body__section" id="section-ai-getting-pro-active"><span>AI: Getting Pro-active</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2300px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Pv9At59u68QQSriwKhhrha" name="Google Pixel 11 Pro Fold-18" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/Pv9At59u68QQSriwKhhrha.jpg" mos="" align="middle" fullscreen="" width="2300" height="1294" 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 Pixel phone so you know the 11 Pro Fold is going to have a boatload of AI features. But there’s a handful of useful ones that you won’t find on the Fold 8 Ultra. </p><p>Gemini Spark can perform tasks on your behalf in the background while you do other stuff. For example, you can ask Gemini to summarize emails related to your party RSVPs and have it create a spreadsheet of everyone’s dietary preferences.</p><p>Speech recognition also gets a boost with the Pixel 11 Pro Fold thanks to Rambler. You can say all the “uhs” and “ums” you want and this Foldable will edit them out on the fly.</p><p>Gemini’s Proactive Intelligent Suggestions builds on the hit-or-miss Magic Cue from previous Pixel phones, surfacing the right info just when you need it. For example, if someone asks if you’re available on a certain day and time, you’ll see a prompt for previewing your calendar — without having to leave the app.</p><p>This works for everything from being able to preview flight info to peeking at a restaurant. You can even book a table from within your messages with the tap of a button.</p><h3 class="article-body__section" id="section-performance-and-battery-breaking-the-2nm-barrier"><span>Performance and Battery: Breaking the 2nm barrier</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4803px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="G85rY5T6RpMtNN8XHTYVSb" name="Google Pixel 11 Pro Fold-LIST2" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/G85rY5T6RpMtNN8XHTYVSb.jpg" mos="" align="middle" fullscreen="" width="4803" height="2702" 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 Pixel 11 Pro packs a new Tensor G6 chip that is among the first in the world built on a 2nm process. And that means you should expect a speed boost along with longer battery life — even with a smaller battery than the Pixel 10 Pro Fold.</p><p>For example, Google promises an Instant Night Sight feature for taking low-light photos with virtually no processing time. But we’ll have to test this out to see how it works.</p><p>And with a much faster TPU on board, the Pixel 11 Pro Fold should be able to perform on-device AI tasks much faster than before.</p><p>The 4,806 mAh battery inside the Pixel 11 Pro Fold is smaller than the 5,000 mAh battery for the Pixel 10 Pro Fold, but Google is still promising up to 24 hours of battery life. That’s because the G6 chip is designed to be 20% more efficient.</p><p>However, the Galaxy Z Fold 8 has a 5,015 mAh battery with newer silicon carbon tech, while the Pixel Fold is still stuck on Lithium Ion, so we’ll have to see which foldable lasts longer.</p><p>When it comes to wireless charging, Google has an advantage because it has Qi2 magnets built into the phone. With Samsung you have to buy a case.</p><h3 class="article-body__section" id="section-outlook"><span>Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5893px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Ypss5gjgWtC9BhKtQQBieb" name="Google Pixel 11 Pro Fold-17" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/Ypss5gjgWtC9BhKtQQBieb.jpg" mos="" align="middle" fullscreen="" width="5893" height="3315" 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 Pixel 11 Pro Fold is a much improved foldable phone. It’s lighter, thinner, tougher and faster. Plus, it has a longer zoom than the Z Fold 8 Ultra, a wider front display and — eureka! — you can actually take it to the beach.</p><p>Add in the brighter screens and shatterproof back and you have some pretty solid reasons for picking the Pixel 11 Pro Fold over Samsung.</p><p>On the other hand, the Galaxy Z Fold 8 Ultra is noticeably thinner and lighter; it has a less visible crease; and it packs sharper main and ultrawide cameras. Plus, you have the ability to run three apps at once.</p><p>I don’t see the HiLight feature being all that useful on the Pixel 11 Pro Fold. More practical to me are Gemini proactive suggestions, as well as camera features like Magic Capture.</p><p>Overall, I’d be pretty torn between the Pixel 11 Pro Fold and Galaxy Z Fold 8 Ultra. But I’ll have to do some in-depth testing to see which one I’d buy with my own money. Stay tuned for my full review.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I held the Pixel Tag and it does one critical thing that the AirTag doesn’t — here’s what it is ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I’ve said in my <a href="https://www.tomsguide.com/phones/apple-airtag-2-review">AirTag 2 review</a> how it’s the most findable tracker ever created, but Google might dethrone it with the impending arrival of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Pixel Tag</a>. It’s Google’s direct response to Apple, complete with an ultra-sleek design, one year’s worth of battery life, ultra-wideband support, the same $29 price, and more.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><p>Yet, it does something else that completely elevates it above the AirTag. I’m specifically referring to my annoyance when the battery gets low. With the AirTag, I get one notification on my iPhone, and if I miss or forget about it, I end up realizing months after the fact that it’s dead (and no longer traceable).</p><p>The Pixel Tag, on the other hand, will continue to send low-battery notifications every two weeks until the battery dies. But that's not the only thing that helps set the Pixel Tag apart from the AirTag.</p><h2 id="google-pixel-tag-vs-apple-airtag-2-specifications">Google Pixel Tag vs. Apple AirTag 2: Specifications</h2><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="WLBwWZJNKHtV2RPtktBBXe" name="Google Pixel Tag hands-on" alt="Google Pixel Tag hands-on." src="https://cdn.mos.cms.futurecdn.net/WLBwWZJNKHtV2RPtktBBXe.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: John Velasco / Tom's Guide)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel Tag</strong></p></td><td  ><p><strong>Apple AirTag 2</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$29 (1-pack) / $99 (4-pack)</p></td><td  ><p>$29 (1-pack) / $99 (4-pack)</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>28 x 46.1 x 5.4 mm</p></td><td  ><p>31.9 mm diameter x 8 mm depth</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>0.4 ounces (11.8 grams)</p></td><td  ><p>0.4 ounces (11.8 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>Materials</strong></p></td><td  ><p>Stainless steel & polycarbonate</p></td><td  ><p>Stainless steel & plastic</p></td></tr><tr><td class="firstcol " ><p><strong>Water/Dust Resistance</strong></p></td><td  ><p>IP67</p></td><td  ><p>IP67</p></td></tr><tr><td class="firstcol " ><p><strong>Reverse Phone Finding</strong></p></td><td  ><p>Yes (Built-in button)</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>Location Tech</strong></p></td><td  ><p>Ultra-Wideband (UWB) + Bluetooth Channel Sounding</p></td><td  ><p>2nd-Gen Ultra-Wideband (UWB)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Type</strong></p></td><td  ><p>User-replaceable CR2032 coin cell</p></td><td  ><p>User-replaceable CR2032 coin cell</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Life</strong></p></td><td  ><p>Up to 1 year</p></td><td  ><p>Up to 1 year</p></td></tr><tr><td class="firstcol " ><p><strong>Tracking Network</strong></p></td><td  ><p>Google Find Hub</p></td><td  ><p>Apple Find My Network</p></td></tr><tr><td class="firstcol " ><p><strong>Item Sharing</strong></p></td><td  ><p>Up to 10 users</p></td><td  ><p>Up to 5 users</p></td></tr></tbody></table></div><h2 id="non-stop-low-battery-notifications">Non-stop low-battery notifications</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/njRMximS2hbFnr5jR3xWTe.jpg" alt="Google Pixel Tag hands-on." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/FMcvCiaNVNF5EjtpphzDTe.jpg" alt="Google Pixel Tag hands-on." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/rcVBDfPALz5eYcsrNQnBYe.jpg" alt="Google Pixel Tag hands-on." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>One of my biggest annoyances with Bluetooth trackers (especially the AirTag) is going to track an item down, only to discover the battery died months ago. Yes, I might’ve seen the initial low-battery notification on my phone, but sending just one alert really isn't enough.</p><p>This is exactly what makes the Pixel Tag way more helpful because, unlike the AirTag, it will persistently send low-battery reminders. You might say it’s overkill, but it’s necessary in my opinion, especially after testing dozens of trackers this year alone. By continuously sending notifications every two weeks until the battery dies, I’m bound to notice one of them and actually go out to buy a replacement coin cell battery.</p><h2 id="how-it-compares-to-the-airtag-2">How it compares to the AirTag 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="8KbwUrXYkTY7KLwmrwBfWe" name="Google Pixel Tag hands-on" alt="Google Pixel Tag hands-on." src="https://cdn.mos.cms.futurecdn.net/8KbwUrXYkTY7KLwmrwBfWe.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Google really took the time to design the Pixel Tag to be the most findable tracker ever. There are several key advantages it has over the AirTag 2, which give it added value — especially considering they both share the same $29 price tag. Here are some of its standout features against the AirTag 2:</p><ul><li><strong>Two-way tracking:</strong> I can trace the AirTag 2 with my iPhone, but I can’t do the reverse. The Pixel Tag, however, works in both directions: my phone tracks the tag, and the tag’s integrated button can ring my phone.</li><li><strong>Slimmer design:</strong> Measuring 5.4 mm thin compared to the AirTag 2’s 8mm-thick round shape, the Pixel Tag slides into card slots and wallet pockets with far less bulge.</li><li><strong>Network & range precision:</strong> While the AirTag 2 relies on Apple's second-generation UWB chip, the Pixel Tag pairs Ultra-Wideband precision finding with Bluetooth Channel Sounding for reliable distance and directional guidance through obstacles up to 50 meters away.</li><li><strong>Multi-user sharing:</strong> Google allows you to share a single Pixel Tag with up to 10 people in the Find Hub app — double Apple's limit of 5 — making it significantly better suited for shared family items like keys, pet collars, and equipment.</li></ul><h2 id="outlook">Outlook</h2><p>There have been plenty of Android-compatible key finders and trackers, but I think the Pixel Tag finally fills a crucial gap in the ecosystem. By pairing a robust hardware design with seamless Google Find Hub integration, end-to-end encrypted tracking, reverse phone finding, and, most importantly, those persistent low-battery notifications.</p><p>Google has a tracker that doesn't just match the competition — it genuinely makes finding anything way easier. The Pixel Tag goes on sale November 11 for $29 individually or $99 for a 4-pack.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exVJ3O"></div>                            </div>                            <script src="https://kwizly.com/embed/exVJ3O.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/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">After 10 years of Pixels, why is Google still making phones?</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Made by Google event — how to watch and what to expect</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-and-iphone-18-pro-pre-order-date-just-tipped-heres-when-you-can-get-yours">iPhone Ultra and iPhone 18 Pro pre-order date just tipped — here's when you can get yours</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is</link>
                                                                            <description>
                            <![CDATA[ The Google Pixel Tag takes on the AirTag 2 with an ultra-slim chassis, two-way phone finding, and persistent low-battery reminders that make it the ultimate tracker. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">AFf25Wk5PmtqSxGc4W8efL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/kqbfghowtgi2Z5x6ez2AQe-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 12 Aug 2026 14:00:00 +0000</pubDate>                                                                                                                                <updated>Wed, 12 Aug 2026 14:05:40 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.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/kqbfghowtgi2Z5x6ez2AQe-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel Tag hands-on.]]></media:description>                                                            <media:text><![CDATA[Google Pixel Tag hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel Tag hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/kqbfghowtgi2Z5x6ez2AQe-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve said in my <a href="https://www.tomsguide.com/phones/apple-airtag-2-review">AirTag 2 review</a> how it’s the most findable tracker ever created, but Google might dethrone it with the impending arrival of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Pixel Tag</a>. It’s Google’s direct response to Apple, complete with an ultra-sleek design, one year’s worth of battery life, ultra-wideband support, the same $29 price, and more.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><p>Yet, it does something else that completely elevates it above the AirTag. I’m specifically referring to my annoyance when the battery gets low. With the AirTag, I get one notification on my iPhone, and if I miss or forget about it, I end up realizing months after the fact that it’s dead (and no longer traceable).</p><p>The Pixel Tag, on the other hand, will continue to send low-battery notifications every two weeks until the battery dies. But that's not the only thing that helps set the Pixel Tag apart from the AirTag.</p><h2 id="google-pixel-tag-vs-apple-airtag-2-specifications">Google Pixel Tag vs. Apple AirTag 2: Specifications</h2><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="WLBwWZJNKHtV2RPtktBBXe" name="Google Pixel Tag hands-on" alt="Google Pixel Tag hands-on." src="https://cdn.mos.cms.futurecdn.net/WLBwWZJNKHtV2RPtktBBXe.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: John Velasco / Tom's Guide)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel Tag</strong></p></td><td  ><p><strong>Apple AirTag 2</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$29 (1-pack) / $99 (4-pack)</p></td><td  ><p>$29 (1-pack) / $99 (4-pack)</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>28 x 46.1 x 5.4 mm</p></td><td  ><p>31.9 mm diameter x 8 mm depth</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>0.4 ounces (11.8 grams)</p></td><td  ><p>0.4 ounces (11.8 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>Materials</strong></p></td><td  ><p>Stainless steel & polycarbonate</p></td><td  ><p>Stainless steel & plastic</p></td></tr><tr><td class="firstcol " ><p><strong>Water/Dust Resistance</strong></p></td><td  ><p>IP67</p></td><td  ><p>IP67</p></td></tr><tr><td class="firstcol " ><p><strong>Reverse Phone Finding</strong></p></td><td  ><p>Yes (Built-in button)</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>Location Tech</strong></p></td><td  ><p>Ultra-Wideband (UWB) + Bluetooth Channel Sounding</p></td><td  ><p>2nd-Gen Ultra-Wideband (UWB)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Type</strong></p></td><td  ><p>User-replaceable CR2032 coin cell</p></td><td  ><p>User-replaceable CR2032 coin cell</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Life</strong></p></td><td  ><p>Up to 1 year</p></td><td  ><p>Up to 1 year</p></td></tr><tr><td class="firstcol " ><p><strong>Tracking Network</strong></p></td><td  ><p>Google Find Hub</p></td><td  ><p>Apple Find My Network</p></td></tr><tr><td class="firstcol " ><p><strong>Item Sharing</strong></p></td><td  ><p>Up to 10 users</p></td><td  ><p>Up to 5 users</p></td></tr></tbody></table></div><h2 id="non-stop-low-battery-notifications">Non-stop low-battery notifications</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/njRMximS2hbFnr5jR3xWTe.jpg" alt="Google Pixel Tag hands-on." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/FMcvCiaNVNF5EjtpphzDTe.jpg" alt="Google Pixel Tag hands-on." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/rcVBDfPALz5eYcsrNQnBYe.jpg" alt="Google Pixel Tag hands-on." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>One of my biggest annoyances with Bluetooth trackers (especially the AirTag) is going to track an item down, only to discover the battery died months ago. Yes, I might’ve seen the initial low-battery notification on my phone, but sending just one alert really isn't enough.</p><p>This is exactly what makes the Pixel Tag way more helpful because, unlike the AirTag, it will persistently send low-battery reminders. You might say it’s overkill, but it’s necessary in my opinion, especially after testing dozens of trackers this year alone. By continuously sending notifications every two weeks until the battery dies, I’m bound to notice one of them and actually go out to buy a replacement coin cell battery.</p><h2 id="how-it-compares-to-the-airtag-2">How it compares to the AirTag 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="8KbwUrXYkTY7KLwmrwBfWe" name="Google Pixel Tag hands-on" alt="Google Pixel Tag hands-on." src="https://cdn.mos.cms.futurecdn.net/8KbwUrXYkTY7KLwmrwBfWe.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Google really took the time to design the Pixel Tag to be the most findable tracker ever. There are several key advantages it has over the AirTag 2, which give it added value — especially considering they both share the same $29 price tag. Here are some of its standout features against the AirTag 2:</p><ul><li><strong>Two-way tracking:</strong> I can trace the AirTag 2 with my iPhone, but I can’t do the reverse. The Pixel Tag, however, works in both directions: my phone tracks the tag, and the tag’s integrated button can ring my phone.</li><li><strong>Slimmer design:</strong> Measuring 5.4 mm thin compared to the AirTag 2’s 8mm-thick round shape, the Pixel Tag slides into card slots and wallet pockets with far less bulge.</li><li><strong>Network & range precision:</strong> While the AirTag 2 relies on Apple's second-generation UWB chip, the Pixel Tag pairs Ultra-Wideband precision finding with Bluetooth Channel Sounding for reliable distance and directional guidance through obstacles up to 50 meters away.</li><li><strong>Multi-user sharing:</strong> Google allows you to share a single Pixel Tag with up to 10 people in the Find Hub app — double Apple's limit of 5 — making it significantly better suited for shared family items like keys, pet collars, and equipment.</li></ul><h2 id="outlook">Outlook</h2><p>There have been plenty of Android-compatible key finders and trackers, but I think the Pixel Tag finally fills a crucial gap in the ecosystem. By pairing a robust hardware design with seamless Google Find Hub integration, end-to-end encrypted tracking, reverse phone finding, and, most importantly, those persistent low-battery notifications.</p><p>Google has a tracker that doesn't just match the competition — it genuinely makes finding anything way easier. The Pixel Tag goes on sale November 11 for $29 individually or $99 for a 4-pack.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exVJ3O"></div>                            </div>                            <script src="https://kwizly.com/embed/exVJ3O.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/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">After 10 years of Pixels, why is Google still making phones?</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Made by Google event — how to watch and what to expect</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-and-iphone-18-pro-pre-order-date-just-tipped-heres-when-you-can-get-yours">iPhone Ultra and iPhone 18 Pro pre-order date just tipped — here's when you can get yours</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Made by Google Event LIVE from NYC — here's everything Google announced today ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="live-content"><p>Google did something complete off script. Instead of waiting until the official start time for its <a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Made by Google 2026</a> event, it ended up formally introducing the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a>, <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a>, Pixel 11 Pro XL, <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">Pixel 11 Pro Fold</a>, and more hours earlier. So, what else can we expect from the actual event hours from now?</p><p>It’s clear where Google is focusing its efforts, as Gemini and AI continue to be how the company distinguishes its devices from the competition. That was certainly true at <a href="https://www.tomsguide.com/news/live/google-io-2026-live-news-updates">Google I/O 2026</a> earlier this year, where we saw previews of <a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever">Gemini Intelligence</a>, <a href="https://www.tomsguide.com/ai/google-gemini/google-unveils-gemini-spark-a-24-7-personal-ai-agent-that-could-be-a-game-changer-for-agentic-ai">Gemini Spark</a>, <a href="https://www.tomsguide.com/ai/gemini-omni-flash-can-create-and-edit-videos-with-your-voice-and-it-feels-like-the-future-of-multimodal-ai">Gemini Omni</a>, and more.</p><p>But Google faces stiff competition following the launch of Samsung's <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Fold 8 Ultra</a>, and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Flip 8</a> — and with Apple’s event expected next month — these new Pixels can’t afford to come up short. Keep your browser pointed here for live updates, including our hands-on impressions on all the new announcements.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><h2 class="article-body__section" id="section-how-to-watch-made-by-google-2026"><span>How to watch Made by Google 2026</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="A9UTYipZyVAKtiXXMwo3vB" name="Made by Google ‘25 12-14 screenshot" alt="Made by Google 2025 pre-roll" src="https://cdn.mos.cms.futurecdn.net/A9UTYipZyVAKtiXXMwo3vB.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Made by Google 2026 kicks off later today, August 12, with the live event happening in New York City at 6:00 p.m. ET / 3:00 p.m. PT / 11:00 p.m. BST. That’s much later in the day than Google's traditional event timing, which certainly adds some intrigue. Regardless, you can catch up with all of the action as it unfolds by watching the <a href="https://www.youtube.com/live/c84y9gAY90c" target="_blank">live stream on YouTube</a>.</p><h2 class="article-body__section" id="section-made-by-google-2026-biggest-announcements"><span>Made by Google 2026: Biggest announcements</span></h2><ul><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend"><strong>Pixel 11:</strong></a> Google’s standard flagship gets minor upgrades after last year’s major refresh, backed by the new Tensor G6 chipset. It has a similar triple camera setup as before, with a thinner camera module, improved battery life, and an upgraded 30x Super Zoom.</li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend"><strong>Pixel 11 Pro:</strong></a> The compact Pro model looks similar to last year’s design, but it features Google’s new HiLight LED light that glows in different colors for notifications. On top of that, it has an updated Pro Res Zoom that reaches up to 120x, a Tensor G6 chip, a new MediaTek modem, and a base storage upgrade to 256GB.</li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend"><strong>Pixel 11 Pro XL:</strong></a> This top-of-the-line flagship carries the same new features as its smaller sibling, including the HiLight LED and 120x Pro Res Zoom. It’s also getting an even brighter display than before — reaching up to 3,600 nits — which could make it one of the brightest screens on the market.</li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less"><strong>Pixel 11 Pro Fold:</strong></a> Google’s next-generation foldable retains its sleek form factor. Highlights include a new “Pine” colorway, a redesigned camera island, the HiLight LED, and the same triple-camera setup as the other Pro models.</li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tried-the-new-google-pixel-watch-5-and-its-new-health-and-safety-features-blow-the-apple-watch-out-of-the-water"><strong>Pixel Watch 5:</strong></a> Google’s new smartwatch receives a minor refresh featuring refined health tracking and tighter Gemini AI integration. It maintains its signature circular aesthetic while bringing modest battery and performance enhancements.</li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is"><strong>Pixel Tag</strong>:</a> Google’s long-rumored AirTag competitor finally make its debut to expand the Find My network. It features Ultra-Wideband (UWB) support and the ability to send notifications every two weeks until the battery dies.</li><li><strong>Pixel Buds Pro 2:</strong> A full successor to Google's wireless earbuds is unlikely at this event, though a new green colorway for the Pixel Buds Pro 2 is announced instead.</li><li><strong>Other Devices:</strong> Google could also use the stage to show off more <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebooks</a>. While Google introduced its own hardware at Google I/O 2026, third-party models from other PC makers were expected to follow — making this event a likely spot for them to appear.</li></ul></div><div class="live-content"><time datetime="2026-08-12T08:11:18+00:00">August 12, 2026 – 4:11 AM</time><h2 id="tensor-g6-s-benchmarks-are-not-looking-good">Tensor G6's benchmarks are not looking good</h2><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="WUba8Y4z7jqREDbxjAmewg" name="yYqB9AUAngdZQvixhd5GQP copy" alt="galaxy s26 ultra vs pixel 11 pro xl" src="https://cdn.mos.cms.futurecdn.net/WUba8Y4z7jqREDbxjAmewg.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 / Evan Blass)</span></figcaption></figure><p>Google phones have never really been performance powerhouses, but things have gotten a lot worse since the launch of the Tensor series. While there had been some hope that the new Tensor G6, which is made with TSMC hardware rather than Samsung's, might up the ante, <a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">leaked benchmarks paint a very different story.</a></p><p>Early Geekbench listings for the Pixel 11 Pro XL reveal figures that the Tensor G6 is lagging really far behind the likes of iPhone 17 Pro Mac and Galaxy S26 Ultra. In fact the chip's multi-core score of 5,196 is almost half the speed of the S26 Ultra's 10,212.</p><div ><table><caption>Pixel 11 Pro XL Geekbench Scores compared</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Single-Core Score</strong></p></td><td  ><p><strong>Multi-Core Score</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro XL </strong></p></td><td  ><p>2,112</p></td><td  ><p>5,196</p></td></tr><tr><td class="firstcol " ><p><strong>Apple iPhone 17 Pro Max </strong></p></td><td  ><p>2,995</p></td><td  ><p>8,562</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra </strong></p></td><td  ><p>2,808</p></td><td  ><p>10,212</p></td></tr></tbody></table></div><p>Geekbench scores can be faked, and we'll need to do our own testing to see exactly how the Pixel 10 Pro XL really does compare to its biggest rivals. But this isn't a good look, mere hours ahead of the Made by Google event.</p></div><div class="live-content"><time datetime="2026-08-12T08:19:35+00:00">August 12, 2026 – 4:19 AM</time><h2 id="what-are-the-biggest-upgrades-we-can-expect">What are the biggest upgrades we can expect?</h2><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="Ew4zuorgkGJi2y43LdCL54" name="Pixel 11 Pro leak" alt="Google Pixel 11 Pro leaked image" src="https://cdn.mos.cms.futurecdn.net/Ew4zuorgkGJi2y43LdCL54.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: Evan Blass)</span></figcaption></figure><p>Google phones often leak in full long before the launch event, and Pixel 11 series is no exception. For those of you that are hoping to pick up a Google Pixel 11 Pro,<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-vs-11-pro-5-expected-upgrades"> just what sort of upgrades can you expect this year</a>?</p><p>Honestly, it doesn't seem like there's a whole lot going on with the latest generation. The five biggest upgrades appear to be a more powerful Tensor G6, a new MediaTek (rather than Samsung) modem,  256GB of base storage on the non-XL model, 120x AI-assisted zoom and the new HiLight notification LED.</p><p>That's not a whole lot, especially when Tensor G6 is shaping up to be a lot slower than rival chips. But, depending on which phone you currently have, these upgrades might be worth it for you.</p></div><div class="live-content"><time datetime="2026-08-12T08:30:07+00:00">August 12, 2026 – 4:30 AM</time><h2 id="when-will-you-be-able-to-pre-order">When will you be able to pre-order?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:880px;"><p class="vanilla-image-block" style="padding-top:50.91%;"><img id="ZzHKuKbSH8WxHC5cnt8gZ" name="Screenshot 2026-08-12 092923" alt="google pixel 11 pre-order splashpage" src="https://cdn.mos.cms.futurecdn.net/ZzHKuKbSH8WxHC5cnt8gZ.png" mos="" align="middle" fullscreen="" width="880" height="448" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Since Google is as leaky as a broken colander, the company has started drip-feeding us with official information to hype up the launch of this year's new phones. Part of that included revealing <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">when the phones will actually be available to pre-order</a>, as part of a countdown on the Google Store homepage.</p><p>Unsurprisingly that countdown ends today, but weirdly it ends well in advance of Made by Google itself. The countdown ends at 10 a.m. ET/7 a.m. PT, while the event itself it's scheduled until 6 p.m. ET/3p.m. PT.</p><p>So erm, it looks like Google will let you see what the phones are all about, and let you secure your own, a whole eight hours before the launch event itself. Which is a, erm, interesting decision to say the least.</p></div><div class="live-content"><time datetime="2026-08-12T08:50:15+00:00">August 12, 2026 – 4:50 AM</time><h2 id="save-when-you-pre-order-but-only-if-you-hurry">Save when you pre-order, but only if you hurry</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Speaking of pre-orders, if you sign up for the <a href="https://store.google.com" target="_blank" rel="nofollow">Google Store's</a> marketing emails, you will net yourself an exclusive discount code for a Pixel 11-series pre-order. We don't know how much of a discount, only that it will be some amount of money off your final total — which is good.</p><p>Obviously this means signing up the promotional emails, with Google promising news, offers, personalized mail and other things. But there's nothing to say you can't unsubscribe later, once your exclusive discount has been redeemed.</p><p>The catch? You have to sign up before 10 a.m. ET/7 a.m. PT, which means you only have five hours before this offer expires forever.</p></div><div class="live-content"><time datetime="2026-08-12T09:10:25+00:00">August 12, 2026 – 5:10 AM</time><h2 id="some-users-are-getting-lucky-with-early-discount-codes">Some users are getting lucky with early discount codes</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1440px;"><p class="vanilla-image-block" style="padding-top:53.75%;"><img id="fuxkYBmjYhZmgRvP8sg2An" name="57c9a905-1571-4466-92fc-9778064fc966_1440x774" alt="Leaked image of the Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/fuxkYBmjYhZmgRvP8sg2An.png" mos="" align="middle" fullscreen="" width="1440" height="774" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>If you're a long-time Pixel user, you may find that Google has sent you a pre-order discount code without any kind of prompting. <a href="https://www.reddit.com/r/GooglePixel/comments/1vlpqdc/google_pixel_launch_offer/?solution=6899a1d7fe45e3396899a1d7fe45e339&js_challenge=1&token=7afd7253fec22262ff1c52b1703fe9ec0b283bac8076b7f8a9a47165bd75575a&jsc_orig_r=" target="_blank">Users on Reddit</a> have reported discounts ranging from $100 to $250, or their equivalent local currency. $150 seems to be the most common, though.</p><p>It's not clear how Google is choosing people, and I certainly haven't seen any discounts in my inbox, but a lot of users report owning an older Pixel device. We're talking Pixel 7 era, whereas I have a Pixel 10 Pro.</p><p>Like the codes due to be sent out to the Google Store mailing lists, these codes are tied to users' own personal Google accounts. So don't go out trying to claim codes from people who otherwise wouldn't use them, unless you're willing to let them place the order for you.</p><p>But it's worth checking your emails and your junk folder to see whether Google has deemed you worthy of a discount.</p></div><div class="live-content"><time datetime="2026-08-12T09:32:23+00:00">August 12, 2026 – 5:32 AM</time><h2 id="the-pixel-tag-could-finally-arrive">The Pixel Tag could finally arrive</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:730px;"><p class="vanilla-image-block" style="padding-top:64.66%;"><img id="VVqwn8F6xnXkxbzuxKyKvN" name="Screenshot 2026-08-04 170414" alt="leaked pixel tag images" src="https://cdn.mos.cms.futurecdn.net/VVqwn8F6xnXkxbzuxKyKvN.png" mos="" align="middle" fullscreen="" width="730" height="472" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 9to5Google)</span></figcaption></figure><p>We've been hearing rumors about a Google-made Bluetooth tracker for a few years, and this year looks like the year Google will finally announce it. The <a href="https://9to5google.com/2026/07/31/this-is-the-google-pixel-tag/" target="_blank">Pixel Tag</a> appears to be an oval-shaped tracker, similar to Samsung Galaxy Tag but without the key-ring hole. It's also expected to be compatible with Google's Find Hub, just like how AirTags work with Apple's Find My Device system.</p><p>We don't know much more, including what kind of batteries it has or whether there's a precision tracking feature. But it's one more option for those of you that want one of the <a href="https://www.tomsguide.com/us/best-key-finders,review-2657.html">best key-finders</a> that works with Android phones.</p></div><div class="live-content"><time datetime="2026-08-12T09:50:47+00:00">August 12, 2026 – 5:50 AM</time><h2 id="adding-to-hilights-to-the-pixel-11-series">Adding to HiLights to the Pixel 11 series</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="MMVKYt4EStWuesGovSJ8oC" name="image (3)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/MMVKYt4EStWuesGovSJ8oC.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>One of the most prominent rumors about the Pixel 11 series is that Google will add a new RGB LED at the back of the phone. Once called Pixel Glow, but more recently reported to be called HiLight, this LED is designed to act as a notification alert of sorts — flashing a specific color depending on what sort of alert has arrived on your phone.</p><p>Sadly it sounds like this feature will be limited to the Pro models, meaning the standard <a href="https://x.com/evowizz/status/2086831483730170001">Pixel 11 could miss out</a>. Which could be a good or bad thing, depending on whether you think HiLight is likely to be a gimmick or something genuinely useful.</p></div><div class="live-content"><time datetime="2026-08-12T10:18:47+00:00">August 12, 2026 – 6:18 AM</time><h2 id="what-sort-of-specs-can-we-expect-to-see">What sort of specs can we expect to see?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="8897kp7dMTMmu9uULdRdmC" name="image (2)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/8897kp7dMTMmu9uULdRdmC.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>Considering how poor Google is at keeping secrets, it's no surprise that Pixel 11 series specs have been out there for a while. Here's what we expect to see from all four phones:</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11</strong></p></td><td  ><p><strong>Google Pixel 11 Pro </strong></p></td><td  ><p><strong>Google Pixel 11 Pro XL</strong></p></td><td  ><p><strong>Google Pixel 11 Pro Fold</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $899</p></td><td  ><p>From $1,099</p></td><td  ><p>From $1,299</p></td><td  ><p>From $1,899</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3-inch OLED</p></td><td  ><p>6.3-inch OLED</p></td><td  ><p>6.8-inch OLED</p></td><td  ><p>6.4-inch cover display, 8-inch foldable display</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>60-120Hz</p></td><td  ><p>1 - 120Hz</p></td><td  ><p>1 - 120Hz</p></td><td  ><p>2 - 120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td><td  ><p>12 / 16GB</p></td><td  ><p>12 / 16GB</p></td><td  ><p>13 / 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB</p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>10.8MP</p></td><td  ><p>42MP</p></td><td  ><p>42MP</p></td><td  ><p>Dual 10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Camera</strong></p></td><td  ><p>48MP main, 13MP ultrawide, 10.8MP telephoto w/5x optical zoom</p></td><td  ><p>50MP wide, 48MP ultrawide, 48MP 5x telephoto</p></td><td  ><p>50MP wide, 48MP ultrawide, 48MP 5x telephoto</p></td><td  ><p>48MP Main,10.5 MP ultra,10.8 MP Telephoto (5x zoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,840 mAh</p></td><td  ><p>4,707 mAh</p></td><td  ><p>5,115 mAh</p></td><td  ><p>4,658 mAh</p></td></tr></tbody></table></div></div><div class="live-content"><time datetime="2026-08-12T10:44:08+00:00">August 12, 2026 – 6:44 AM</time><h2 id="why-does-google-still-make-phones">Why does Google still make phones?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tQYECESB6kTYsHkctUkEAe" name="Google-Pixel-10-Pro-XL-01-LIST" alt="Google Pixel 10 Pro XL back" src="https://cdn.mos.cms.futurecdn.net/tQYECESB6kTYsHkctUkEAe.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 may have looked at the Pixel 11 leaked specs and wondered, "is that all?" Well you're not alone, and the years of weak upgrades has some of here at Tom's Guide wondering why <a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">Google still bothers with its own hardware.</a></p><p>We asked some analysts their thoughts on this, and the responses w ere rather enlightening. For starters google has been heavily focussed on Android and software prowess, rather than trying to usurp other Android phone makers on the hardware front — effectively trying to resent what Android should be. This also ties into AI, and the sheer number of new features that Pixel phones tend to come with.</p><p>Plus Pixel phones still sell, despite their weak-looking hardware, coming in fourth in the U.S. sales rankings. With that in mind, if Pixels sell and Google makes money, why give up?</p><p>You read the full report, with more in-depth details,<a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones"> right here.</a></p></div><div class="live-content"><time datetime="2026-08-12T11:14:06+00:00">August 12, 2026 – 7:14 AM</time><h2 id="it-s-not-just-about-phones">It's not just about phones</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yUK7WGbaQNpRSYJsSTQfG" name="Pixel-Watch-4-3" alt="Pixel Watch 4 on wrist showing time, weather and heart rate." src="https://cdn.mos.cms.futurecdn.net/yUK7WGbaQNpRSYJsSTQfG.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>Made by Google is also when we expect to see the newest Google smartwatch, the Pixel Watch 5. There's a lot we still don't know about this particular device, but the design looks to be basically the same as the Pixel Watch 4.</p><p>It's also rumored that Google could introduce a Tensor chipset, rather than the typical Qualcomm, though others suggest we'll just get the same chip as last year. However, other reports claim we could see improvements to AM and battery life, at the expense of having to pay a little extra — supposedly around the $30 mark.</p></div><div class="live-content"><time datetime="2026-08-12T11:45:53+00:00">August 12, 2026 – 7:45 AM</time><h2 id="what-about-pixel-buds">What about Pixel 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:1098px;"><p class="vanilla-image-block" style="padding-top:59.65%;"><img id="2Rm2rHYMdVEZphpkw6RLmV" name="Screenshot 2026-08-12 122534" alt="pixel buds pro 2 in olive green color" src="https://cdn.mos.cms.futurecdn.net/2Rm2rHYMdVEZphpkw6RLmV.png" mos="" align="middle" fullscreen="" width="1098" height="655" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>It's been two years since Google last released a pair of Pixel Buds Pro, but it seems we may have to wait another year for the third generation. </p><p>Based on information and images from <a href="https://evleaks.substack.com/" target="_blank">Evan Blass</a>, it seems Google's contribution to the Pixel Buds world this year is another pair of Pixel Buds Pro 2. The buds look identical to the existing Pro model, aside from the fact they're colored in some kind of olive green hue.</p><p>Presumably these buds will be the same as ones already on sale. Which means no major advances, and any new features that may be announced will likely roll out to all Buds Pro 2.</p></div><div class="live-content"><time datetime="2026-08-12T12:15:31+00:00">August 12, 2026 – 8:15 AM</time><h2 id="same-old-same-fold">Same old, Same Fold</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1607px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iWjN5TBTWe8mz96yhig3Ad" name="Screenshot 2026-03-10 104108" alt="google pixel 11 pro fold leaked cad renders" src="https://cdn.mos.cms.futurecdn.net/iWjN5TBTWe8mz96yhig3Ad.png" mos="" align="middle" fullscreen="" width="1607" height="904" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Onleaks/Android Headlines)</span></figcaption></figure><p>While Samsung and Apple might be mixing up the usual foldable formula, Google seems to be sticking with the same design it's had for the last few years. The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-images-just-leaked-ahead-of-launch-see-it-from-every-angle-including-a-weird-led">Pixel 11 Pro Fold looks almost identical to the Pixel 10 Pro Fold</a>, despite the fact other phone makers are adopting wider, passport-shaped designs.</p><p>Weirdly Google was something of a pioneer in this area. While not as short as the likes of Galaxy Z Fold 8, the <a href="https://www.tomsguide.com/reviews/google-pixel-fold">original Pixel Fold</a> had a much wider form factor than its successors. </p><p>Here's hoping Google resurrects that design language for a future foldable, because having used both new Galaxy foldables I can say that the Fold 8 is a lot more comfortable.</p></div><div class="live-content"><time datetime="2026-08-12T12:47:57+00:00">August 12, 2026 – 8:47 AM</time><h2 id="positively-magnetic">Positively magnetic</h2><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="eG5oipUEJs8GkrQgeXJwZ4" name="Pixel-10-Pro-07" alt="Google Pixel 10 pro moonstone review images" src="https://cdn.mos.cms.futurecdn.net/eG5oipUEJs8GkrQgeXJwZ4.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Pixel 10 series joined a very exclusive club of phones that feature full magnetic wireless charging. Even a year later, is still mostly comprised of iPhones, Pixels and a few fringe handsets. </p><p>It's almost certain that the Pixel 11 series will follow that example with more "<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixelsnap-is-the-pixel-10-upgrade-everyone-should-be-the-most-excited-about-heres-why">Pixelsnap</a>" hardware, though we'd like to see Google offer a much-needed boost to the Pixel 11 and 11 Pro. Last year's 10 XL came with full 25W Qi2 wireless charging speeds, whereas its three compatriots were limited to 15W. </p><p>That's definitely something we'd like to see changed, especially since it means the Pixel 11 series would rival Apple's iPhone 17 for magnetic wireless charging speeds.</p></div><div class="live-content"><time datetime="2026-08-12T13:09:42+00:00">August 12, 2026 – 9:09 AM</time><h2 id="are-we-in-for-a-battery-life-letdown">Are we in for a battery life letdown?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iW2qh9b7Dc2TwnozDehioG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/iW2qh9b7Dc2TwnozDehioG.jpg" mos="" align="middle" fullscreen="" width="5328" height="2997" 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>One of the most concerning rumors we've seen about the Pixel 11 series is that the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">battery capacity is expected to be lower than last year</a>. Considering Pixel phones are not known for having amazing battery life, this is obviously very concerning.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery capacity</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 (rumored)</strong></p></td><td  ><p>4,840 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10</strong></p></td><td  ><p>4,970 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro (rumored)</strong></p></td><td  ><p>4,707 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro</strong></p></td><td  ><p>4,870 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro XL (rumored)</strong></p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro XL</strong></p></td><td  ><p>5,200 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro Fold (rumored)</strong></p></td><td  ><p>4,658 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro Fold</strong></p></td><td  ><p>5,015 mAh</p></td></tr></tbody></table></div><p>Obviously capacity isn't the only thing affecting battery life, and we know Google is likely changing the supplier of a bunch of hardware this year — including the Tensor G6 chip and the modem. This may end up having a positive impact on power efficiency, which in turn means larger batteries aren't entirely necessary. </p><p>But it doesn't change the fact that I am a little worried. Google does not have a good track record of this, and considering how much better battery life has been in recent Pixel releases, any potential for a dip is a bad thing.</p></div><div class="live-content"><time datetime="2026-08-12T13:49:02+00:00">August 12, 2026 – 9:49 AM</time><h2 id="pro-res-zoom-on-the-pixel-11-pros-could-go-up-to-120x">Pro Res Zoom on the Pixel 11 Pros could go up to 120x</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/25wio4SMCrCEXkiB8F54rn.jpg" alt="Google Pixel 10 Pro XL Pro Res Zoom sample." /><figcaption><small role="credit">Tom's Guide / John Velasco</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QmYLcCune3ukDU8yNr2Ztn.jpg" alt="Google Pixel 10 Pro XL Pro Res Zoom sample." /><figcaption><small role="credit">Tom's Guide / John Velasco</small></figcaption></figure></figure><p>One of the best examples of AI being extremely helpful is <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-captured-these-100x-pro-res-zoom-photos-with-the-pixel-10-pro-xl-and-the-results-blew-me-away">Pro Res Zoom</a> on the Pixel 10 Pros. This AI-assisted feature enhances zoom photos at 30X and beyond by adding sharpness, detail and clarity to what would otherwise be soft zoom photos. Google's reportedly going to upgrade this with the Pixel 11 Pros by extending the zoom to an even astounding 120x zoom level. Paired with Pro Res Zoom, it should put rival phones like the Galaxy S26 Ultra and iPhone 17 Pro Max on notice.</p></div><div class="live-content"><time datetime="2026-08-12T14:05:30+00:00">August 12, 2026 – 10:05 AM</time><h2 id="say-hello-to-the-new-pixel-11-pro">Say hello to the new Pixel 11 Pro!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cueBgSYeqbwAUtwBXcnFRo" name="Google Pixel 11 Pro hands-on" alt="Google Pixel 11 Pro hands-on." src="https://cdn.mos.cms.futurecdn.net/cueBgSYeqbwAUtwBXcnFRo.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>That's right folks! Google's not waiting until later today to unveil its new Pixel 11 lineup. I got the chance to take a look at what I feel is the most notable of the bunch, the Pixel 11 Pro, which features camera upgrades, a new HighLight LED on the back, new Gemini Intelligence features, and more.</p><p>Yes, it does get a $100 price hike, but find out why I think it has the most value in the lineup.</p><p><strong>Read more: </strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11 Pro hands-on</a></p></div><div class="live-content"><time datetime="2026-08-12T14:12:00+00:00">August 12, 2026 – 10:12 AM</time><h2 id="pixel-11-pro-fold-has-unmatched-rugged-durability">Pixel 11 Pro Fold has unmatched rugged durability</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3472px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DnGKx5RZ8krFxvpYrGwsLb" name="Google Pixel 11 Pro Fold LIST1" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/DnGKx5RZ8krFxvpYrGwsLb.jpg" mos="" align="middle" fullscreen="" width="3472" height="1953" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Google's Pixel 11 Pro Fold</a> sets a new benchmark for foldables by introducing the brightest displays ever seen in the category, reaching an impressive peak brightness of 3,600 nits across both its main and cover screens according to Google.</p><p>Combined with full IP68 dust and water resistance and a shatterproof glass composite back, it pairs class-leading outdoor visibility with robust daily durability. And at $1,899, it offers a flagship foldable experience packed with proactive Gemini Intelligence tools and $200 less than its chief competition in the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>.</p></div><div class="live-content"><time datetime="2026-08-12T14:17:19+00:00">August 12, 2026 – 10:17 AM</time><h2 id="hilight-led-is-it-practical-or-a-gimmick">HiLight LED: is it practical or a gimmick?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Tjhq9hW9rpYFfxrLwyKxw5" name="Pixel 11 Pro and Pro XL - HiLight LED.GIF" alt="Pixel 11 Pro and Pro XL HiLight LED." src="https://cdn.mos.cms.futurecdn.net/Tjhq9hW9rpYFfxrLwyKxw5.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a> series introduces the HiLight LED, a customizable rear light ring designed to make at-a-glance notifications effortless when your phone is resting face down. Users can assign distinct color profiles to specific contacts or app alerts, instantly revealing who is reaching out without needing to lift the device.</p><p>Aside from also turning on for Gemini commands, it's limited to just  incoming calls — with Google exploring the option to integrate it with text message notifications. We spent some time checking it out and so far the consensus is that it's more gimmicky than anything else. What do you think?</p></div><div class="live-content"><time datetime="2026-08-12T14:22:50+00:00">August 12, 2026 – 10:22 AM</time><h2 id="does-the-pixel-11-pro-fold-beat-the-galaxy-z-fold-8-ultra">Does the Pixel 11 Pro Fold beat the Galaxy Z Fold 8 Ultra?</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><p>In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold hands-on</a> video, we explain whether the Pixel 11 Pro Fold edges out the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a> by comparing real-world usability, screen brightness, and overall value.</p><p>Google's asserting how the Pixel 11 Pro Fold's durability is way superior than any other notebook-style foldable on the market, including its main rival in the Galaxy Z Fold 8 Ultra. Key highlights include the phone's 3,600-nit peak display brightness, IP68 dust-and-water resistance, built-in magnetic wireless charging, and creator-focused tools like Magic Capture and Creative Studio.</p></div><div class="live-content"><time datetime="2026-08-12T14:28:34+00:00">August 12, 2026 – 10:28 AM</time><h2 id="pixel-watch-5-offers-blood-pressure-and-insulin-resistance-trends">Pixel Watch 5 offers blood pressure and insulin resistance trends</h2><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="JZMdEhCefXJVUM4st7sqRi" name="Google Pixel Watch 5--15" alt="Hands-on with the new Google Pixel Watch 5" src="https://cdn.mos.cms.futurecdn.net/JZMdEhCefXJVUM4st7sqRi.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: John Velasco/Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tried-the-new-google-pixel-watch-5-and-its-new-health-and-safety-features-blow-the-apple-watch-out-of-the-water">Google Pixel Watch 5</a> keeps the sleek design of its predecessor while introducing critical new health and safety innovations, led by a life-saving Breathing Emergency Detection feature.</p><p>Alongside enhanced GPS accuracy and faster processing power, it's health-focused abilities extend to tracking blood pressure and insulin resistance trends — a first for the series. Although a price hike across both the 41mm and 45mm models makes it a bit pricier, its proactive Gemini AI capabilities and advanced monitoring make a compelling case over competing smartwatches.</p></div><div class="live-content"><time datetime="2026-08-12T14:33:57+00:00">August 12, 2026 – 10:33 AM</time><h2 id="pixel-tag-does-this-one-critical-thing-that-the-airtag-doesn-t">Pixel Tag does this one critical thing that the AirTag doesn't</h2><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="owkFBn2BQSWMdGULrJaEUe" name="Google Pixel Tag hands-on" alt="Google Pixel Tag hands-on." src="https://cdn.mos.cms.futurecdn.net/owkFBn2BQSWMdGULrJaEUe.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Personally, I hate that I'm sent only one low battery notification with the <a href="https://www.tomsguide.com/phones/apple-airtag-2-review">AirTag 2</a> — and this is exactly what makes the new <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">Google Pixel Tag</a> way better! Not only does it land at the same $29 price point, but I'm stoked that it will send low-battery reminders every two weeks until the battery dies.</p><p>If that's not enough to convince you it's better than the AirTag 2, it has a slimmer stainless steel and polycarbonate design, features a physical button that enables reverse phone-finding, Ultra-Wideband support, and it also allows sharing with up to 10 users.</p></div><div class="live-content"><time datetime="2026-08-12T14:47:15+00:00">August 12, 2026 – 10:47 AM</time><h2 id="magic-capture-is-genuinely-one-of-those-helpful-ai-features">Magic Capture is genuinely one of those helpful AI features</h2><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="g64f9rWzFjvpmDbyGsoVGP" name="Google Pixel 11 Pro Fold-6" alt="Pixel 11 Pro Fold hands on" src="https://cdn.mos.cms.futurecdn.net/g64f9rWzFjvpmDbyGsoVGP.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: Tom's Guide)</span></figcaption></figure><p>Google's known for all of its AI tools and features, and this year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a> lineup is no exception. Out of all the new stuff we got a first look at, Magic Capture is by far the most captivating and practical one. </p><p>Magic Capture is a standalone camera mode that eliminates the need to choose between shooting photos or video. We saw it in action with a pair of ballet dancers at Google's event and it's one of those features that genuinely works well. In this mode, you record video while on-device AI concurrently extracts, crops, and unblurs key action moments into photos. By automatically curating share-ready stills from live action without requiring manual shutter timing, it allows shooter to stay more present during fast-moving events like sports, concerts, or family gatherings.</p></div><div class="live-content"><time datetime="2026-08-12T15:19:38+00:00">August 12, 2026 – 11:19 AM</time><h2 id="the-pixel-11-pro-fold-turns-into-the-ultimate-teleprompter">The Pixel 11 Pro Fold turns into the ultimate teleprompter</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3061px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="gHHVn2Hv7hqwZcsEKi9UZh" name="Google Pixel 11 Pro Fold-8" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/gHHVn2Hv7hqwZcsEKi9UZh.jpg" mos="" align="middle" fullscreen="" width="3061" height="1722" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We're in the age of influence and Google is certainly aware of this. That's why it's offering Creative Studio, which we got a demo of on the new <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold</a>. It's a suite of video and content creation tools designed to turn the phone into a portable production rig.</p><p>By leveraging the Pixel 11 Pro Fold’s flexible form factor, it includes features like built-in teleprompter controls and hands-free framing for solo creators. And though software controls directly with the device's hardware, it allows users to monitor, script, and record high-quality vlogs and videos on the go without needing extra accessories.</p></div><div class="live-content"><time datetime="2026-08-12T15:44:29+00:00">August 12, 2026 – 11:44 AM</time><h2 id="pixel-11-gets-a-100-price-increase">Pixel 11 gets a $100 price increase</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4192px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tz7X2mBLxChtjfsg5nAkzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/tz7X2mBLxChtjfsg5nAkzf.jpg" mos="" align="middle" fullscreen="" width="4192" height="2358" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>First and foremost, you should know that the entry-level Pixel 11 costs $100 more than last year with an $899 starting cost. Considering how last year's Pixel 10 was a major overhaul, I'm not surprised that Google is a bit lax with the upgrades with the Pixel 11.</p><p>A few of its notable upgrades include the Tensor G6 chip, larger 4,985 mAh battery, faster 25W wired and 25W wireless charging speeds, larger main camera sensor, 30x Super Zoom, and the same Gemini Intelligence features as its Pro siblings.</p></div><div class="live-content"><time datetime="2026-08-12T16:17:40+00:00">August 12, 2026 – 12:17 PM</time><h2 id="pixel-11-pro-fold-vs-galaxy-z-fold-8-ultra-which-foldable-would-you-get">Pixel 11 Pro Fold vs. Galaxy Z Fold 8 Ultra: which foldable would you get?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3223px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RuS339tv62jjRaVhiNzxHP" name="Google Pixel 11 Pro Fold-5" alt="Pixel 11 Pro Fold hands on" src="https://cdn.mos.cms.futurecdn.net/RuS339tv62jjRaVhiNzxHP.jpg" mos="" align="middle" fullscreen="" width="3223" height="1813" 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's no arguing that the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold</a> directly challenges the Galaxy Z Fold 8 Ultra, but does undercutting its rival by $200 really makes it the superior foldable phone?</p><p>Although Samsung holds a clear edge in thinness, weight, and a less noticeable display crease, Google counters with a vastly brighter 3,600-nit panel, full IP68 dust-and-water resistance, a shatterproof glass composite back, and a wider 6.5-inch cover screen that feels less cramped for daily typing. There's also their triple cameras, with the Pixel 11 Pro Fold still offering a longer 5x optical zoom. And paired with built-in magnetic wireless charging courtesy of Pixelsnap, and a smarter suite of proactive Gemini AI features,  it feels like a more complete device.</p></div><div class="live-content"><time datetime="2026-08-12T16:57:38+00:00">August 12, 2026 – 12:57 PM</time><h2 id="will-it-be-powerful-enough">Will it be powerful enough?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2025px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="Fudiia9dAiNt5cGSDLMqKm" name="tensor2.jpg" alt="Google Pixel Event Tensor chip screenshot" src="https://cdn.mos.cms.futurecdn.net/Fudiia9dAiNt5cGSDLMqKm.jpg" mos="" align="middle" fullscreen="" width="2025" height="1137" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We've had some <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend#section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-performance">hands-on time</a> with the new phones, and they do feel "snappy out of the gate."</p><p>However, before today's launch, a new <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-xl-benchmarks-leak-and-tensor-g6-is-96-percent-slower-than-galaxy-s26-ultra">Geekbench leak revealed scores</a> that suggest the Pixel 11 Pro XL lags behind Samsung and Apple offerings by a significant amount.</p><p>We'll run our own tests, but those early tests don't look great.</p></div><div class="live-content"><time datetime="2026-08-12T17:26:47+00:00">August 12, 2026 – 1:26 PM</time><h2 id="colorful-lineup">Colorful lineup</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4192px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tz7X2mBLxChtjfsg5nAkzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/tz7X2mBLxChtjfsg5nAkzf.jpg" mos="" align="middle" fullscreen="" width="4192" height="2358" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The Pixel 11 series is a surprisingly colorful lineup. The four available hues include hibiscus, pistachio, frost, and obsidian. </p><p>If you like your phones to look a little fun, the Pixel 11 certainly has you set.</p></div><div class="live-content"><time datetime="2026-08-12T17:55:50+00:00">August 12, 2026 – 1:55 PM</time><h2 id="the-summer-of-foldables-get-a-new-contender">The summer of foldables get a new contender</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4733px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="zuwjc6dCyBhA5VjLjLWxQb" name="Google Pixel 11 Pro Fold-7" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/zuwjc6dCyBhA5VjLjLWxQb.jpg" mos="" align="middle" fullscreen="" width="4733" height="2662" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We've had some early <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">hands-on time with the new Pixel 11 Pro Fold,</a> and it is pretty impressive, especially compared to the Galaxy Z Fold 8 Ultra. </p><p>It's $200 less, even with the hike, features an amazingly bright display, a shatterproof back and smarter Gemini AI features.</p><p>"Overall, I’d be pretty torn between the Pixel 11 Pro Fold and Galaxy Z Fold 8 Ultra. But I’ll have to do some in-depth testing to see which one I’d buy with my own money," Tom's Guide global editor Mark Spoonauer said.</p></div><div class="live-content"><time datetime="2026-08-12T18:41:32+00:00">August 12, 2026 – 2:41 PM</time><h2 id="holding-the-pixel-tag">Holding the Pixel Tag</h2><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="kqbfghowtgi2Z5x6ez2AQe" name="Google Pixel Tag hands-on" alt="Google Pixel Tag hands-on." src="https://cdn.mos.cms.futurecdn.net/kqbfghowtgi2Z5x6ez2AQe.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>The Pixel 11 phones are fun and all, but the most intriguing device launching today might be <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">the new Pixel Tag.</a> </p><p>The tiny tracker is Google's direct response to the Apple AirTag 2, with a sleek design, a year's worth of battery life, a $29 price tag and more.</p><p>Nicely, compared to Apple, when the battery gets low, the Pixel Tag will send low-battery notifications every two weeks until it dies.</p></div><div class="live-content"><time datetime="2026-08-12T18:57:33+00:00">August 12, 2026 – 2:57 PM</time><h2 id="what-are-you-interested-in-seeing">What are you interested in seeing?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5963px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4cLTAEnni5nnA4PKm7Kv9g" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/4cLTAEnni5nnA4PKm7Kv9g.jpg" mos="" align="middle" fullscreen="" width="5963" height="3354" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Google has several intriguing devices launching today from the new phones to the upgraded Pixel Watch and the new Pixel Tag.</p><p>What are you interested in seeing? </p><p>Let us know in the comments!</p></div><div class="live-content"><time datetime="2026-08-12T19:28:07+00:00">August 12, 2026 – 3:28 PM</time><h2 id="what-else-could-google-announce-at-its-event-now-that-the-pixel-11-is-official">What else could Google announce at its event now that the Pixel 11 is official?</h2><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="LmeePyFfScRBwtPjJKrxA9" name="Googlebook-LIST" alt="Googlebook image" src="https://cdn.mos.cms.futurecdn.net/LmeePyFfScRBwtPjJKrxA9.jpg" mos="" align="middle" fullscreen="" width="4000" height="2250" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We're still a few hours away from the start of the Made by Google 2026 event, which is being held live in New York City. But considering that the company ended up unveiling its <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a> lineup and other gadgets earlier this morning, it does make us wonder what else could be shown at the event.</p><p>Perhaps we could get teasers on some other projects the company's been working on? Maybe we'll finally see more <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebooks</a> from other PC makers? Or perhaps we'll get even more details around some of the <a href="https://www.tomsguide.com/computing/smart-glasses/exclusive-inside-googles-plan-to-win-over-your-face-with-ai-glasses-and-avoid-metas-privacy-missteps">smart glasses</a>?</p></div><div class="live-content"><time datetime="2026-08-12T20:00:34+00:00">August 12, 2026 – 4:00 PM</time><h2 id="seeing-gemini-omni-in-action-on-the-pixel-11-pro-is-impressive">Seeing Gemini Omni in action on the Pixel 11 Pro is impressive</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2290px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="KASwcfsqwhnV7CnFtSgv6Y" name="Gemini Omni" alt="gemini omni" src="https://cdn.mos.cms.futurecdn.net/KASwcfsqwhnV7CnFtSgv6Y.jpg" mos="" align="middle" fullscreen="" width="2290" height="1288" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>In my hands-on time with the Pixel 11 Pro and Pixel 11 Pro XL, I got a quick demo of Gemini Omni. It's one of many new models that the company first announced at Google I/O 2026, but it's something you'll be able to tap into on these new devices.</p><p>What's really impressive about this multi-modal model is how it can create videos in many ways. The demo I got showed off an existing video that needed to be edited to swap out a logo that popped up during the video. So, I shot a photo using the Pixel 11 Pro of this pizza slice I captured and asked Gemini to swap it — but with a slight twist. Instead of the cartoony look from the photo I shot, I asked Gemini to re-render the clip and make it so that the pizza slice was in a Chrome aesthetic. And just like that, it did exactly what I wanted.</p></div><div class="live-content"><time datetime="2026-08-12T20:32:15+00:00">August 12, 2026 – 4:32 PM</time><h2 id="google-has-only-one-foldable-phone-is-that-enough">Google has only one foldable phone — is that enough?</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7673134746834193678" data-video-id="7673134746834193678" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ Retro Highway - Nostalgia Waves" href="https://www.tiktok.com/music/Retro-Highway-7438814424347035664">♬ Retro Highway - Nostalgia Waves</a></section>                    </blockquote></div>                <p>Google's fairly new to the world of foldables compared to rivals Motorola and Samsung. Given the huge pre-order success of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> specifically, it does beg the question whether Google got it right with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold</a>.</p><p>Sure, the design's way more durable and it comes with what's arguably the best camera setup in any foldable phone. However, do you think it's enough to steer consumers towards it? Considering how leaks indicate that Apple's shaping up to go after a wider form factor with its <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-delay-leak-right-after-samsungs-triumphant-galaxy-fold-8-launch-has-me-sick-of-waiting-for-apples-foldable">iPhone Ultra</a>, it does make us wonder even more about the Pixel 11 Pro Fold's broader appeal compared to other foldables.</p></div><div class="live-content"><time datetime="2026-08-12T21:06:05+00:00">August 12, 2026 – 5:06 PM</time><h2 id="you-can-use-pixel-tag-to-ring-your-phone">You can use Pixel Tag to ring your phone</h2><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="njRMximS2hbFnr5jR3xWTe" name="Google Pixel Tag hands-on" alt="Google Pixel Tag hands-on." src="https://cdn.mos.cms.futurecdn.net/njRMximS2hbFnr5jR3xWTe.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>While I can find a missing AirTag with my iPhone, I can't do the opposite. This is exactly what makes the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">Pixel Tag</a> special because there's a button on the back that can be used to ring your phone. It's brilliant honestly and just one of many reasons why I think it's super than the AirTag 2.</p></div><div class="live-content"><time datetime="2026-08-12T21:27:49+00:00">August 12, 2026 – 5:27 PM</time><h2 id="we-re-in">We're in</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HPB8RqRMXKtu2rNpc5ZHzf" name="IMG_2287" alt="Made by Google - Pixel 11 event 2026" src="https://cdn.mos.cms.futurecdn.net/HPB8RqRMXKtu2rNpc5ZHzf.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Made by Google event doesn't start for another 30 minutes, give or take, but we're inside the building and ready to see what Google has to say since it already revealed its devices.</p></div><div class="live-content"><time datetime="2026-08-12T21:45:34+00:00">August 12, 2026 – 5:45 PM</time><h2 id="behind-the-scenes">Behind the scenes</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Tdgj6iKKSZsARDxXjJmeXF.jpg" alt="Behind the scenes-ish at Made by Google 2026" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kHZLTjfXLZpxA4rZc9jzfF.jpg" alt="Behind the scenes-ish at Made by Google 2026" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/nuhF5WPRPmb8cCbZUtBfWF.jpg" alt="Behind the scenes-ish at Made by Google 2026" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Aed3fYxEFywdm2mV4yQFXF.jpg" alt="Behind the scenes-ish at Made by Google 2026" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/75gMb58NmTPAE2vwJgMcAD.jpg" alt="Behind the scenes-ish at Made by Google 2026" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>While we wait, here's a little behind the scenes peek at what we can see from our seats.</p></div><div class="live-content"><time datetime="2026-08-12T21:56:21+00:00">August 12, 2026 – 5:56 PM</time><h2 id="5-minutes-to-showtime">5 minutes to showtime</h2><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="ThTTAFJCAid8NgCxbiXy7G" name="IMG_2322" alt="DJ spinning at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/ThTTAFJCAid8NgCxbiXy7G.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: Tom's Guide)</span></figcaption></figure><p>Just in case you're wondering, no this won't be shot on Google Pixel.</p><p>Meanwhile a DJ spins.</p></div><div class="live-content"><time datetime="2026-08-12T22:02:05+00:00">August 12, 2026 – 6:02 PM</time><h2 id="and-we-re-off">And we're 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TJ6BmPEVVqU7nTuPWfFh7N" name="Made by Google '26 15-10 screenshot" alt="Trevor Noah kicking off Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/TJ6BmPEVVqU7nTuPWfFh7N.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Here we go, Trevor Noah is here to host the event and it looks like several celebs including Steph Curry, Alex Cooper and Shubman Gil will be showing off.</p></div><div class="live-content"><time datetime="2026-08-12T22:04:18+00:00">August 12, 2026 – 6:04 PM</time><h2 id="our-first-rick-osterloh-appearance">Our first Rick Osterloh appearance</h2><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="mqdJpaQSQAJz9ZpaccDoRW" name="Made by Google '26 16-32 screenshot" alt="Rick Osterloh entrance" src="https://cdn.mos.cms.futurecdn.net/mqdJpaQSQAJz9ZpaccDoRW.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's head of devices Rick Osterloh is Trevor's interview. </p><p>"Phones and laptops haven't really changed much in the last 15 years. We're in one of those rare leaps forward."</p></div><div class="live-content"><time datetime="2026-08-12T22:05:36+00:00">August 12, 2026 – 6:05 PM</time><h2 id="here-s-what-i-can-see-from-the-show-floor">Here's what I can see from the show floor</h2><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="CotzeAYK2xLMJ66nXAn5Yf" name="IMG_2333" alt="Behind the scenes at Made by Google 2026 in NYC" src="https://cdn.mos.cms.futurecdn.net/CotzeAYK2xLMJ66nXAn5Yf.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: Tom's Guide)</span></figcaption></figure><p>You may have a better view of this interview than I do if you're streaming on <a href="https://www.youtube.com/live/c84y9gAY90c" target="_blank">YouTube</a>.</p></div><div class="live-content"><time datetime="2026-08-12T22:07:12+00:00">August 12, 2026 – 6:07 PM</time><h2 id="talking-ai">Talking AI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QBCBfengL6i4xnGPWMA6S8" name="Made by Google '26 20-16 screenshot" alt="Rick explaining Gemini to Trevor Noah" src="https://cdn.mos.cms.futurecdn.net/QBCBfengL6i4xnGPWMA6S8.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>"AI means Gemini," Osterloh says. Notes that more than 1 billion people use the AI model. </p><p>Now you can ask Gemini to get things done for you, Osterloh says. Examples he gives includes drafting emails, locations, times and RSVPs for his weekly basketball game.</p></div><div class="live-content"><time datetime="2026-08-12T22:10:24+00:00">August 12, 2026 – 6:10 PM</time><h2 id="gemini-intelligence">Gemini Intelligence</h2><p>"Gemini is no longer an operating system that helps you use your phone. It helps get things done. You can get a lot more done in a lot less time."</p><p>"We're also using Gemini to reimagine devices that people have taken for granted." Rick listed off laptops, phones, cars and teased Intelligent Eyewear.</p><p>"The big idea today is we're building future all abou the technology that helps you stay in the moment instead of taking you out of it."</p></div><div class="live-content"><time datetime="2026-08-12T22:13:25+00:00">August 12, 2026 – 6:13 PM</time><h2 id="isabelle-olsson">Isabelle Olsson</h2><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="DsUEnv3LNpoQwYiZ6zNp6e" name="Made by Google '26 24-9 screenshot" alt="Isabelle Olsson at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/DsUEnv3LNpoQwYiZ6zNp6e.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's Isabelle Olsson has stepped out to discuss the design of the new Pixel 11 series.</p><p>Specifically, how they came up with the colors for the lineup, like hibiscus, one of the bolder colors this year. </p></div><div class="live-content"><time datetime="2026-08-12T22:16:18+00:00">August 12, 2026 – 6:16 PM</time><h2 id="pixel-11-camera">Pixel 11 camera</h2><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="QCsokwSpjKA3QUuTDSuYhG" name="Made by Google '26 28-47 screenshot" alt="Pixel 11 screen at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/QCsokwSpjKA3QUuTDSuYhG.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Olsson says the camera array is slimmer today even with a new main camera. The camera bar is also wrapped in "sleek metal".</p><p>She also talked briefly about the foldable display on the Pixel 11 Pro Fold. </p></div><div class="live-content"><time datetime="2026-08-12T22:17:30+00:00">August 12, 2026 – 6:17 PM</time><h2 id="steph-curry-designed-a-band-for-pixel-watch-5">Steph Curry designed a band for Pixel Watch 5</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pBQEHVQHjyR8qv7NntJ8MP" name="Made by Google '26 29-45 screenshot" alt="Pixel Watch 5 bands at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/pBQEHVQHjyR8qv7NntJ8MP.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>One of the bands you can get for the Pixel Watch 5 was apparently designed by NBA star Steph Curry, who has worked as a health ambassador for Google for the last year.</p></div><div class="live-content"><time datetime="2026-08-12T22:20:28+00:00">August 12, 2026 – 6:20 PM</time><h2 id="durable-devices">Durable 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8AydoC5aP3tr6JAJsSzuFg" name="Made by Google '26 32-6 screenshot" alt="Pixel 11 drop testing at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/8AydoC5aP3tr6JAJsSzuFg.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>One point of pride from our hands on sessions earlier today to this show, Google seems very keen on its the durability of every new device shown today. </p><p>A new film is supposed to make them more scratch resistant. The backpanel on the Pixel 11 phones is supposed to be uncrackable.</p><p>Olsson said that the Google team tested the new display by opening it over 83 million times. Even the foldable has a strong IP water resistance rating.</p><p>The crowd at the show really liked the 83 million stat.</p></div><div class="live-content"><time datetime="2026-08-12T22:22:49+00:00">August 12, 2026 – 6:22 PM</time><h2 id="ayami-nakajo">Ayami Nakajo</h2><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="qUCbFNJf2ziMZYdUzbhHzB" name="Made by Google '26 35-13 screenshot" alt="Pixel 11 fit check at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/qUCbFNJf2ziMZYdUzbhHzB.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Model and actor Ayami Nakajo shows off some of the colors of the new Pixel lineup, from hibiscus to obsidian. </p><p>Apparently, there's a new Google store in Tokyo that opens today.</p><p>And that's it.</p></div><div class="live-content"><time datetime="2026-08-12T22:25:08+00:00">August 12, 2026 – 6:25 PM</time><h2 id="pixel-camera-improvements">Pixel Camera improvements</h2><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="o89wsK2o2TjCHKbJbDMnzN" name="Made by Google '26 36-48 screenshot" alt="Pixel 11 camera deconstructed at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/o89wsK2o2TjCHKbJbDMnzN.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We'll put the Pixel 11 cameras through the paces soon but it comes with 120x zoom and a new Instant Night Site mode for night photography.</p></div><div class="live-content"><time datetime="2026-08-12T22:26:03+00:00">August 12, 2026 – 6:26 PM</time><h2 id="15-minute-charging-time">15 minute charging time</h2><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="LGdtSjLgYALPPsYbE9RguW" name="Made by Google '26 38-12 screenshot" alt="Pixel 11 Pro battery life at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/LGdtSjLgYALPPsYbE9RguW.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>For both the Watch 5 and 11 phones, apparently it only takes 15 minutes to charge them to mostly full.</p><p>15 minutes for 15 hours on the phones and 15 minutes for a full day on the watch.</p></div><div class="live-content"><time datetime="2026-08-12T22:29:56+00:00">August 12, 2026 – 6:29 PM</time><h2 id="it-s-interesting-how-different-the-lighting-looks">It's interesting how different the lighting looks</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aF5apG7qqc9Eem5YFQUp7C" name="IMG_2379" alt="More behind the scenes at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/aF5apG7qqc9Eem5YFQUp7C.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>From where we're sitting, it's interesting how different the lighting looks in our cameras versus on the livestream.</p></div><div class="live-content"><time datetime="2026-08-12T22:33:14+00:00">August 12, 2026 – 6:33 PM</time><h2 id="hilite">HiLite</h2><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="3wttfSLJ9JxqQeqU5CJdJT" name="Made by Google '26 44-29 screenshot" alt="Toni Urban at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/3wttfSLJ9JxqQeqU5CJdJT.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's Toni Urban has entered the show to talk about the new HiLite feature which lets you know when lets you assign groups or people one of five colors. The phone will glow, letting you know that they're reaching out to you.</p><p>Pink, purple, and teal are among the 5 colors. Apparently, red is not one of them.</p></div><div class="live-content"><time datetime="2026-08-12T22:35:19+00:00">August 12, 2026 – 6:35 PM</time><h2 id="dj-peggy-guo-demonstrates-hilite">DJ Peggy Guo demonstrates HiLite</h2><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="KB6UohsM2kovGy7Ga2gajg" name="Made by Google '26 46-49 screenshot" alt="Peggy Gou at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/KB6UohsM2kovGy7Ga2gajg.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>DJ Peggy Guo came out to demonstrate how HiLite works by calling Toni Urban and the LED in the camera glowed teal.</p><p>It's pretty simple, but I wonder how long it stays and how easy it is to miss.</p></div><div class="live-content"><time datetime="2026-08-12T22:38:55+00:00">August 12, 2026 – 6:38 PM</time><h2 id="juju-watkins-and-jesser">Juju Watkins and Jesser</h2><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="x6m25quwmP3Gu2CpR42XgG" name="IMG_2409" alt="Behind the scenes for a live demo at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/x6m25quwmP3Gu2CpR42XgG.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: Tom's Guide)</span></figcaption></figure><p>Juju Watkins and some Youtuber Jesser showcase the new Magic Capture which is supposed to highlight and pull photos for you from a moment.</p><p>Apparently, it pulls from up to 400 frames to find interesting photos in a moment.</p></div><div class="live-content"><time datetime="2026-08-12T22:43:33+00:00">August 12, 2026 – 6:43 PM</time><h2 id="it-s-time-to-talk-ai">It's time to talk AI </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4R5e9MQTMaU6Wi2jYSBUbj" name="Made by Google '26 54-20 screenshot" alt="Stephanie Scott at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/4R5e9MQTMaU6Wi2jYSBUbj.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Stephanie Scott of the Pixel product team is here to talk AI.</p><p>Scott says Pixel was designed for Gemini Intelligence. In her example, the AI pulls together your calendar and determines things like if you have availability and add things to your calendar. </p><p>Apparently, this also works with Pixel watch where it will add things to your calendar and give you texting suggestions, plus pinch controls.</p></div><div class="live-content"><time datetime="2026-08-12T22:49:12+00:00">August 12, 2026 – 6:49 PM</time><h2 id="new-rambler-feature">New Rambler feature</h2><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="jCNFRLdQdeMxLdnKdjEeHS" name="Made by Google '26 58-47 screenshot" alt="Joel Yawili at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/jCNFRLdQdeMxLdnKdjEeHS.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Joel Yawili, who apparently is also from Johannesburg, South Africa, to discuss how naturally you can speak to the Pixel phone and it will type for you.</p><p>It's part of the new rambler feature which will take out hitches and edits while you talk.</p><p>The phone is supposed to make sense of not just what you said but also what you meant.</p></div><div class="live-content"><time datetime="2026-08-12T22:55:13+00:00">August 12, 2026 – 6:55 PM</time><h2 id="pixel-can-understand-american-sign-language">Pixel can understand American Sign Language</h2><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="xm3e2YUB8HaSKUxWxFpMJc" name="Made by Google '26 1-7-30 screenshot" alt="ASL live translation demo at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/xm3e2YUB8HaSKUxWxFpMJc.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>One of the few things I'm interested in AI for is live translation. Google brought out actor Daniel Durant who used ASL to talk to the phone.</p><p>The phone then translated his gestures from ASL to English and read it aloud. Pretty cool.</p><p>It also transcribed vocal speech as well.</p><p>They did note that this feature is in its early stages.</p></div><div class="live-content"><time datetime="2026-08-12T23:02:30+00:00">August 12, 2026 – 7:02 PM</time><h2 id="high-claims-from-google-on-what-the-pixel-watch-5-can-track-for-health">High claims from Google on what the Pixel Watch 5 can track for health</h2><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="VZDJP4XATiWrdpN3maknSd" name="Made by Google '26 1-14-50 screenshot" alt="Blood pressure tracking on Pixel Watch 5 at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/VZDJP4XATiWrdpN3maknSd.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Health Guardian features are meant to give "more visibility" in big health issues, including blood pressure, insulin resistance, and breathing emergency trends.</p><p>In some cases, like the breathing emergency detector it will call emergency services for you. But it's starting in Europe.</p></div><div class="live-content"><time datetime="2026-08-12T23:07:00+00:00">August 12, 2026 – 7:07 PM</time><h2 id="google-claims-its-pixel-watch-heart-tracker-is-as-good-as-a-chest-tracker">Google claims its Pixel Watch heart tracker is as good as a chest tracker</h2><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="WwL7N3QMuU52BwGM4Yikf9" name="IMG_2466" alt="Behind the scenes at Made By Google 2026 with Olympian Chari Hawkins" src="https://cdn.mos.cms.futurecdn.net/WwL7N3QMuU52BwGM4Yikf9.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: Tom's Guide)</span></figcaption></figure><p>In discussion with Olympian Chari Hawkins, Google's Noah Presler claimed that the Pixel Watch 5 has a heart rate tracker as good as one that you would wear on your chest. </p><p>There's also an AI coach that tracks your sleep and body to suggest workouts based on how your body is actually responding.</p></div><div class="live-content"><time datetime="2026-08-12T23:10:40+00:00">August 12, 2026 – 7:10 PM</time><h2 id="super-accurate-gps-on-pixel-watch">Super accurate GPS on Pixel Watch</h2><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="X8bZ3aBuQKdmi6FBHTDpa5" name="Made by Google '26 1-16-58 screenshot" alt="Chari Hawkins Olympian at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/X8bZ3aBuQKdmi6FBHTDpa5.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Another bold claim we'll need to test. Presler said that the GPS tracking on the Pixel Watch 5 can use both atmospheric stations and satellites to accurately track you for routes. </p><p>He also said it was more accurate than the Garmin Fenix and Apple Watch Ultra 3. That's one we'll put to the test when we have all three on hand.</p></div><div class="live-content"><time datetime="2026-08-12T23:16:10+00:00">August 12, 2026 – 7:16 PM</time><h2 id="switching-is-supposed-to-be-easier">Switching is supposed to be easier</h2><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="9pabcqr7HiHF58uCKgHSUT" name="IMG_2476" alt="Alex Cooper at Made By Google 2026 behind the scenes" src="https://cdn.mos.cms.futurecdn.net/9pabcqr7HiHF58uCKgHSUT.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: Tom's Guide)</span></figcaption></figure><p>Alex Cooper of Call Me Daddy is hosting a segment about switching from say Apple to Pixel if you want. </p><p>Photos, files, group chats, data transfers and location sharing are supposed to be easier now. Google says it worked with Apple to make this process easier.</p></div><div class="live-content"><time datetime="2026-08-12T23:20:56+00:00">August 12, 2026 – 7:20 PM</time><h2 id="yes-that-was-one-of-us">Yes that was one of us</h2><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="2Jwk48puAqhvJVobnETfc8" name="Made by Google '26 1-31-32 screenshot" alt="Major football clubs are now on Pixel at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/2Jwk48puAqhvJVobnETfc8.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>You may have heard there are some football fans in the crowd. Yes, that was us. </p></div><div class="live-content"><time datetime="2026-08-12T23:24:55+00:00">August 12, 2026 – 7:24 PM</time><h2 id="that-s-the-show">That's the show</h2><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="utrLUY746QG8zLTDeCSArf" name="Made by Google '26 1-36-30 screenshot" alt="Made By Google 2026 that's a wrap" src="https://cdn.mos.cms.futurecdn.net/utrLUY746QG8zLTDeCSArf.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>With PinkPantheress done, that's the show. Thanks for following along with this. </p><p>If you missed it, we already have hands on articles on every device announced today which you can check out. We'll have full reviews coming soon. </p><p>And don't just wait for the full reviews, we'll also put these devices to the test against top offerings from other companies including Apple, Samsung, Garmin and more. </p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/news/live/made-by-google-2026-live</link>
                                                                            <description>
                            <![CDATA[ Google's Made by Google 2026 event kicks off late this evening, but it's already announced its flagship Pixel 11 lineup, Pixel Watch 5, Pixel Tag tracker, and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">2HNYqeWFozMHbYfaj9brs7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/WrZT5HKdju2rpUpoyD46j-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 12 Aug 2026 08:00:00 +0000</pubDate>                                                                                                                                <updated>Wed, 12 Aug 2026 23:25:46 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.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/WrZT5HKdju2rpUpoyD46j-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Made by Google 2026 showing new devices.]]></media:description>                                                            <media:text><![CDATA[Made by Google 2026 showing new devices.]]></media:text>
                                <media:title type="plain"><![CDATA[Made by Google 2026 showing new devices.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/WrZT5HKdju2rpUpoyD46j-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="live-content"><p>Google did something complete off script. Instead of waiting until the official start time for its <a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Made by Google 2026</a> event, it ended up formally introducing the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a>, <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a>, Pixel 11 Pro XL, <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">Pixel 11 Pro Fold</a>, and more hours earlier. So, what else can we expect from the actual event hours from now?</p><p>It’s clear where Google is focusing its efforts, as Gemini and AI continue to be how the company distinguishes its devices from the competition. That was certainly true at <a href="https://www.tomsguide.com/news/live/google-io-2026-live-news-updates">Google I/O 2026</a> earlier this year, where we saw previews of <a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever">Gemini Intelligence</a>, <a href="https://www.tomsguide.com/ai/google-gemini/google-unveils-gemini-spark-a-24-7-personal-ai-agent-that-could-be-a-game-changer-for-agentic-ai">Gemini Spark</a>, <a href="https://www.tomsguide.com/ai/gemini-omni-flash-can-create-and-edit-videos-with-your-voice-and-it-feels-like-the-future-of-multimodal-ai">Gemini Omni</a>, and more.</p><p>But Google faces stiff competition following the launch of Samsung's <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Fold 8 Ultra</a>, and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Flip 8</a> — and with Apple’s event expected next month — these new Pixels can’t afford to come up short. Keep your browser pointed here for live updates, including our hands-on impressions on all the new announcements.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><h2 class="article-body__section" id="section-how-to-watch-made-by-google-2026"><span>How to watch Made by Google 2026</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="A9UTYipZyVAKtiXXMwo3vB" name="Made by Google ‘25 12-14 screenshot" alt="Made by Google 2025 pre-roll" src="https://cdn.mos.cms.futurecdn.net/A9UTYipZyVAKtiXXMwo3vB.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Made by Google 2026 kicks off later today, August 12, with the live event happening in New York City at 6:00 p.m. ET / 3:00 p.m. PT / 11:00 p.m. BST. That’s much later in the day than Google's traditional event timing, which certainly adds some intrigue. Regardless, you can catch up with all of the action as it unfolds by watching the <a href="https://www.youtube.com/live/c84y9gAY90c" target="_blank">live stream on YouTube</a>.</p><h2 class="article-body__section" id="section-made-by-google-2026-biggest-announcements"><span>Made by Google 2026: Biggest announcements</span></h2><ul><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend"><strong>Pixel 11:</strong></a> Google’s standard flagship gets minor upgrades after last year’s major refresh, backed by the new Tensor G6 chipset. It has a similar triple camera setup as before, with a thinner camera module, improved battery life, and an upgraded 30x Super Zoom.</li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend"><strong>Pixel 11 Pro:</strong></a> The compact Pro model looks similar to last year’s design, but it features Google’s new HiLight LED light that glows in different colors for notifications. On top of that, it has an updated Pro Res Zoom that reaches up to 120x, a Tensor G6 chip, a new MediaTek modem, and a base storage upgrade to 256GB.</li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend"><strong>Pixel 11 Pro XL:</strong></a> This top-of-the-line flagship carries the same new features as its smaller sibling, including the HiLight LED and 120x Pro Res Zoom. It’s also getting an even brighter display than before — reaching up to 3,600 nits — which could make it one of the brightest screens on the market.</li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less"><strong>Pixel 11 Pro Fold:</strong></a> Google’s next-generation foldable retains its sleek form factor. Highlights include a new “Pine” colorway, a redesigned camera island, the HiLight LED, and the same triple-camera setup as the other Pro models.</li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tried-the-new-google-pixel-watch-5-and-its-new-health-and-safety-features-blow-the-apple-watch-out-of-the-water"><strong>Pixel Watch 5:</strong></a> Google’s new smartwatch receives a minor refresh featuring refined health tracking and tighter Gemini AI integration. It maintains its signature circular aesthetic while bringing modest battery and performance enhancements.</li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is"><strong>Pixel Tag</strong>:</a> Google’s long-rumored AirTag competitor finally make its debut to expand the Find My network. It features Ultra-Wideband (UWB) support and the ability to send notifications every two weeks until the battery dies.</li><li><strong>Pixel Buds Pro 2:</strong> A full successor to Google's wireless earbuds is unlikely at this event, though a new green colorway for the Pixel Buds Pro 2 is announced instead.</li><li><strong>Other Devices:</strong> Google could also use the stage to show off more <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebooks</a>. While Google introduced its own hardware at Google I/O 2026, third-party models from other PC makers were expected to follow — making this event a likely spot for them to appear.</li></ul></div><div class="live-content"><time datetime="2026-08-12T08:11:18+00:00">August 12, 2026 – 4:11 AM</time><h2 id="tensor-g6-s-benchmarks-are-not-looking-good">Tensor G6's benchmarks are not looking good</h2><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="WUba8Y4z7jqREDbxjAmewg" name="yYqB9AUAngdZQvixhd5GQP copy" alt="galaxy s26 ultra vs pixel 11 pro xl" src="https://cdn.mos.cms.futurecdn.net/WUba8Y4z7jqREDbxjAmewg.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 / Evan Blass)</span></figcaption></figure><p>Google phones have never really been performance powerhouses, but things have gotten a lot worse since the launch of the Tensor series. While there had been some hope that the new Tensor G6, which is made with TSMC hardware rather than Samsung's, might up the ante, <a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">leaked benchmarks paint a very different story.</a></p><p>Early Geekbench listings for the Pixel 11 Pro XL reveal figures that the Tensor G6 is lagging really far behind the likes of iPhone 17 Pro Mac and Galaxy S26 Ultra. In fact the chip's multi-core score of 5,196 is almost half the speed of the S26 Ultra's 10,212.</p><div ><table><caption>Pixel 11 Pro XL Geekbench Scores compared</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Single-Core Score</strong></p></td><td  ><p><strong>Multi-Core Score</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro XL </strong></p></td><td  ><p>2,112</p></td><td  ><p>5,196</p></td></tr><tr><td class="firstcol " ><p><strong>Apple iPhone 17 Pro Max </strong></p></td><td  ><p>2,995</p></td><td  ><p>8,562</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra </strong></p></td><td  ><p>2,808</p></td><td  ><p>10,212</p></td></tr></tbody></table></div><p>Geekbench scores can be faked, and we'll need to do our own testing to see exactly how the Pixel 10 Pro XL really does compare to its biggest rivals. But this isn't a good look, mere hours ahead of the Made by Google event.</p></div><div class="live-content"><time datetime="2026-08-12T08:19:35+00:00">August 12, 2026 – 4:19 AM</time><h2 id="what-are-the-biggest-upgrades-we-can-expect">What are the biggest upgrades we can expect?</h2><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="Ew4zuorgkGJi2y43LdCL54" name="Pixel 11 Pro leak" alt="Google Pixel 11 Pro leaked image" src="https://cdn.mos.cms.futurecdn.net/Ew4zuorgkGJi2y43LdCL54.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: Evan Blass)</span></figcaption></figure><p>Google phones often leak in full long before the launch event, and Pixel 11 series is no exception. For those of you that are hoping to pick up a Google Pixel 11 Pro,<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-vs-11-pro-5-expected-upgrades"> just what sort of upgrades can you expect this year</a>?</p><p>Honestly, it doesn't seem like there's a whole lot going on with the latest generation. The five biggest upgrades appear to be a more powerful Tensor G6, a new MediaTek (rather than Samsung) modem,  256GB of base storage on the non-XL model, 120x AI-assisted zoom and the new HiLight notification LED.</p><p>That's not a whole lot, especially when Tensor G6 is shaping up to be a lot slower than rival chips. But, depending on which phone you currently have, these upgrades might be worth it for you.</p></div><div class="live-content"><time datetime="2026-08-12T08:30:07+00:00">August 12, 2026 – 4:30 AM</time><h2 id="when-will-you-be-able-to-pre-order">When will you be able to pre-order?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:880px;"><p class="vanilla-image-block" style="padding-top:50.91%;"><img id="ZzHKuKbSH8WxHC5cnt8gZ" name="Screenshot 2026-08-12 092923" alt="google pixel 11 pre-order splashpage" src="https://cdn.mos.cms.futurecdn.net/ZzHKuKbSH8WxHC5cnt8gZ.png" mos="" align="middle" fullscreen="" width="880" height="448" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Since Google is as leaky as a broken colander, the company has started drip-feeding us with official information to hype up the launch of this year's new phones. Part of that included revealing <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">when the phones will actually be available to pre-order</a>, as part of a countdown on the Google Store homepage.</p><p>Unsurprisingly that countdown ends today, but weirdly it ends well in advance of Made by Google itself. The countdown ends at 10 a.m. ET/7 a.m. PT, while the event itself it's scheduled until 6 p.m. ET/3p.m. PT.</p><p>So erm, it looks like Google will let you see what the phones are all about, and let you secure your own, a whole eight hours before the launch event itself. Which is a, erm, interesting decision to say the least.</p></div><div class="live-content"><time datetime="2026-08-12T08:50:15+00:00">August 12, 2026 – 4:50 AM</time><h2 id="save-when-you-pre-order-but-only-if-you-hurry">Save when you pre-order, but only if you hurry</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Speaking of pre-orders, if you sign up for the <a href="https://store.google.com" target="_blank" rel="nofollow">Google Store's</a> marketing emails, you will net yourself an exclusive discount code for a Pixel 11-series pre-order. We don't know how much of a discount, only that it will be some amount of money off your final total — which is good.</p><p>Obviously this means signing up the promotional emails, with Google promising news, offers, personalized mail and other things. But there's nothing to say you can't unsubscribe later, once your exclusive discount has been redeemed.</p><p>The catch? You have to sign up before 10 a.m. ET/7 a.m. PT, which means you only have five hours before this offer expires forever.</p></div><div class="live-content"><time datetime="2026-08-12T09:10:25+00:00">August 12, 2026 – 5:10 AM</time><h2 id="some-users-are-getting-lucky-with-early-discount-codes">Some users are getting lucky with early discount codes</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1440px;"><p class="vanilla-image-block" style="padding-top:53.75%;"><img id="fuxkYBmjYhZmgRvP8sg2An" name="57c9a905-1571-4466-92fc-9778064fc966_1440x774" alt="Leaked image of the Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/fuxkYBmjYhZmgRvP8sg2An.png" mos="" align="middle" fullscreen="" width="1440" height="774" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>If you're a long-time Pixel user, you may find that Google has sent you a pre-order discount code without any kind of prompting. <a href="https://www.reddit.com/r/GooglePixel/comments/1vlpqdc/google_pixel_launch_offer/?solution=6899a1d7fe45e3396899a1d7fe45e339&js_challenge=1&token=7afd7253fec22262ff1c52b1703fe9ec0b283bac8076b7f8a9a47165bd75575a&jsc_orig_r=" target="_blank">Users on Reddit</a> have reported discounts ranging from $100 to $250, or their equivalent local currency. $150 seems to be the most common, though.</p><p>It's not clear how Google is choosing people, and I certainly haven't seen any discounts in my inbox, but a lot of users report owning an older Pixel device. We're talking Pixel 7 era, whereas I have a Pixel 10 Pro.</p><p>Like the codes due to be sent out to the Google Store mailing lists, these codes are tied to users' own personal Google accounts. So don't go out trying to claim codes from people who otherwise wouldn't use them, unless you're willing to let them place the order for you.</p><p>But it's worth checking your emails and your junk folder to see whether Google has deemed you worthy of a discount.</p></div><div class="live-content"><time datetime="2026-08-12T09:32:23+00:00">August 12, 2026 – 5:32 AM</time><h2 id="the-pixel-tag-could-finally-arrive">The Pixel Tag could finally arrive</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:730px;"><p class="vanilla-image-block" style="padding-top:64.66%;"><img id="VVqwn8F6xnXkxbzuxKyKvN" name="Screenshot 2026-08-04 170414" alt="leaked pixel tag images" src="https://cdn.mos.cms.futurecdn.net/VVqwn8F6xnXkxbzuxKyKvN.png" mos="" align="middle" fullscreen="" width="730" height="472" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 9to5Google)</span></figcaption></figure><p>We've been hearing rumors about a Google-made Bluetooth tracker for a few years, and this year looks like the year Google will finally announce it. The <a href="https://9to5google.com/2026/07/31/this-is-the-google-pixel-tag/" target="_blank">Pixel Tag</a> appears to be an oval-shaped tracker, similar to Samsung Galaxy Tag but without the key-ring hole. It's also expected to be compatible with Google's Find Hub, just like how AirTags work with Apple's Find My Device system.</p><p>We don't know much more, including what kind of batteries it has or whether there's a precision tracking feature. But it's one more option for those of you that want one of the <a href="https://www.tomsguide.com/us/best-key-finders,review-2657.html">best key-finders</a> that works with Android phones.</p></div><div class="live-content"><time datetime="2026-08-12T09:50:47+00:00">August 12, 2026 – 5:50 AM</time><h2 id="adding-to-hilights-to-the-pixel-11-series">Adding to HiLights to the Pixel 11 series</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="MMVKYt4EStWuesGovSJ8oC" name="image (3)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/MMVKYt4EStWuesGovSJ8oC.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>One of the most prominent rumors about the Pixel 11 series is that Google will add a new RGB LED at the back of the phone. Once called Pixel Glow, but more recently reported to be called HiLight, this LED is designed to act as a notification alert of sorts — flashing a specific color depending on what sort of alert has arrived on your phone.</p><p>Sadly it sounds like this feature will be limited to the Pro models, meaning the standard <a href="https://x.com/evowizz/status/2086831483730170001">Pixel 11 could miss out</a>. Which could be a good or bad thing, depending on whether you think HiLight is likely to be a gimmick or something genuinely useful.</p></div><div class="live-content"><time datetime="2026-08-12T10:18:47+00:00">August 12, 2026 – 6:18 AM</time><h2 id="what-sort-of-specs-can-we-expect-to-see">What sort of specs can we expect to see?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="8897kp7dMTMmu9uULdRdmC" name="image (2)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/8897kp7dMTMmu9uULdRdmC.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>Considering how poor Google is at keeping secrets, it's no surprise that Pixel 11 series specs have been out there for a while. Here's what we expect to see from all four phones:</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11</strong></p></td><td  ><p><strong>Google Pixel 11 Pro </strong></p></td><td  ><p><strong>Google Pixel 11 Pro XL</strong></p></td><td  ><p><strong>Google Pixel 11 Pro Fold</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $899</p></td><td  ><p>From $1,099</p></td><td  ><p>From $1,299</p></td><td  ><p>From $1,899</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3-inch OLED</p></td><td  ><p>6.3-inch OLED</p></td><td  ><p>6.8-inch OLED</p></td><td  ><p>6.4-inch cover display, 8-inch foldable display</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>60-120Hz</p></td><td  ><p>1 - 120Hz</p></td><td  ><p>1 - 120Hz</p></td><td  ><p>2 - 120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td><td  ><p>12 / 16GB</p></td><td  ><p>12 / 16GB</p></td><td  ><p>13 / 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB</p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>10.8MP</p></td><td  ><p>42MP</p></td><td  ><p>42MP</p></td><td  ><p>Dual 10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Camera</strong></p></td><td  ><p>48MP main, 13MP ultrawide, 10.8MP telephoto w/5x optical zoom</p></td><td  ><p>50MP wide, 48MP ultrawide, 48MP 5x telephoto</p></td><td  ><p>50MP wide, 48MP ultrawide, 48MP 5x telephoto</p></td><td  ><p>48MP Main,10.5 MP ultra,10.8 MP Telephoto (5x zoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,840 mAh</p></td><td  ><p>4,707 mAh</p></td><td  ><p>5,115 mAh</p></td><td  ><p>4,658 mAh</p></td></tr></tbody></table></div></div><div class="live-content"><time datetime="2026-08-12T10:44:08+00:00">August 12, 2026 – 6:44 AM</time><h2 id="why-does-google-still-make-phones">Why does Google still make phones?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tQYECESB6kTYsHkctUkEAe" name="Google-Pixel-10-Pro-XL-01-LIST" alt="Google Pixel 10 Pro XL back" src="https://cdn.mos.cms.futurecdn.net/tQYECESB6kTYsHkctUkEAe.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 may have looked at the Pixel 11 leaked specs and wondered, "is that all?" Well you're not alone, and the years of weak upgrades has some of here at Tom's Guide wondering why <a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones">Google still bothers with its own hardware.</a></p><p>We asked some analysts their thoughts on this, and the responses w ere rather enlightening. For starters google has been heavily focussed on Android and software prowess, rather than trying to usurp other Android phone makers on the hardware front — effectively trying to resent what Android should be. This also ties into AI, and the sheer number of new features that Pixel phones tend to come with.</p><p>Plus Pixel phones still sell, despite their weak-looking hardware, coming in fourth in the U.S. sales rankings. With that in mind, if Pixels sell and Google makes money, why give up?</p><p>You read the full report, with more in-depth details,<a href="https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones"> right here.</a></p></div><div class="live-content"><time datetime="2026-08-12T11:14:06+00:00">August 12, 2026 – 7:14 AM</time><h2 id="it-s-not-just-about-phones">It's not just about phones</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yUK7WGbaQNpRSYJsSTQfG" name="Pixel-Watch-4-3" alt="Pixel Watch 4 on wrist showing time, weather and heart rate." src="https://cdn.mos.cms.futurecdn.net/yUK7WGbaQNpRSYJsSTQfG.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>Made by Google is also when we expect to see the newest Google smartwatch, the Pixel Watch 5. There's a lot we still don't know about this particular device, but the design looks to be basically the same as the Pixel Watch 4.</p><p>It's also rumored that Google could introduce a Tensor chipset, rather than the typical Qualcomm, though others suggest we'll just get the same chip as last year. However, other reports claim we could see improvements to AM and battery life, at the expense of having to pay a little extra — supposedly around the $30 mark.</p></div><div class="live-content"><time datetime="2026-08-12T11:45:53+00:00">August 12, 2026 – 7:45 AM</time><h2 id="what-about-pixel-buds">What about Pixel 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:1098px;"><p class="vanilla-image-block" style="padding-top:59.65%;"><img id="2Rm2rHYMdVEZphpkw6RLmV" name="Screenshot 2026-08-12 122534" alt="pixel buds pro 2 in olive green color" src="https://cdn.mos.cms.futurecdn.net/2Rm2rHYMdVEZphpkw6RLmV.png" mos="" align="middle" fullscreen="" width="1098" height="655" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>It's been two years since Google last released a pair of Pixel Buds Pro, but it seems we may have to wait another year for the third generation. </p><p>Based on information and images from <a href="https://evleaks.substack.com/" target="_blank">Evan Blass</a>, it seems Google's contribution to the Pixel Buds world this year is another pair of Pixel Buds Pro 2. The buds look identical to the existing Pro model, aside from the fact they're colored in some kind of olive green hue.</p><p>Presumably these buds will be the same as ones already on sale. Which means no major advances, and any new features that may be announced will likely roll out to all Buds Pro 2.</p></div><div class="live-content"><time datetime="2026-08-12T12:15:31+00:00">August 12, 2026 – 8:15 AM</time><h2 id="same-old-same-fold">Same old, Same Fold</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1607px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iWjN5TBTWe8mz96yhig3Ad" name="Screenshot 2026-03-10 104108" alt="google pixel 11 pro fold leaked cad renders" src="https://cdn.mos.cms.futurecdn.net/iWjN5TBTWe8mz96yhig3Ad.png" mos="" align="middle" fullscreen="" width="1607" height="904" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Onleaks/Android Headlines)</span></figcaption></figure><p>While Samsung and Apple might be mixing up the usual foldable formula, Google seems to be sticking with the same design it's had for the last few years. The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-images-just-leaked-ahead-of-launch-see-it-from-every-angle-including-a-weird-led">Pixel 11 Pro Fold looks almost identical to the Pixel 10 Pro Fold</a>, despite the fact other phone makers are adopting wider, passport-shaped designs.</p><p>Weirdly Google was something of a pioneer in this area. While not as short as the likes of Galaxy Z Fold 8, the <a href="https://www.tomsguide.com/reviews/google-pixel-fold">original Pixel Fold</a> had a much wider form factor than its successors. </p><p>Here's hoping Google resurrects that design language for a future foldable, because having used both new Galaxy foldables I can say that the Fold 8 is a lot more comfortable.</p></div><div class="live-content"><time datetime="2026-08-12T12:47:57+00:00">August 12, 2026 – 8:47 AM</time><h2 id="positively-magnetic">Positively magnetic</h2><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="eG5oipUEJs8GkrQgeXJwZ4" name="Pixel-10-Pro-07" alt="Google Pixel 10 pro moonstone review images" src="https://cdn.mos.cms.futurecdn.net/eG5oipUEJs8GkrQgeXJwZ4.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Pixel 10 series joined a very exclusive club of phones that feature full magnetic wireless charging. Even a year later, is still mostly comprised of iPhones, Pixels and a few fringe handsets. </p><p>It's almost certain that the Pixel 11 series will follow that example with more "<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixelsnap-is-the-pixel-10-upgrade-everyone-should-be-the-most-excited-about-heres-why">Pixelsnap</a>" hardware, though we'd like to see Google offer a much-needed boost to the Pixel 11 and 11 Pro. Last year's 10 XL came with full 25W Qi2 wireless charging speeds, whereas its three compatriots were limited to 15W. </p><p>That's definitely something we'd like to see changed, especially since it means the Pixel 11 series would rival Apple's iPhone 17 for magnetic wireless charging speeds.</p></div><div class="live-content"><time datetime="2026-08-12T13:09:42+00:00">August 12, 2026 – 9:09 AM</time><h2 id="are-we-in-for-a-battery-life-letdown">Are we in for a battery life letdown?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iW2qh9b7Dc2TwnozDehioG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/iW2qh9b7Dc2TwnozDehioG.jpg" mos="" align="middle" fullscreen="" width="5328" height="2997" 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>One of the most concerning rumors we've seen about the Pixel 11 series is that the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">battery capacity is expected to be lower than last year</a>. Considering Pixel phones are not known for having amazing battery life, this is obviously very concerning.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery capacity</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 (rumored)</strong></p></td><td  ><p>4,840 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10</strong></p></td><td  ><p>4,970 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro (rumored)</strong></p></td><td  ><p>4,707 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro</strong></p></td><td  ><p>4,870 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro XL (rumored)</strong></p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro XL</strong></p></td><td  ><p>5,200 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro Fold (rumored)</strong></p></td><td  ><p>4,658 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro Fold</strong></p></td><td  ><p>5,015 mAh</p></td></tr></tbody></table></div><p>Obviously capacity isn't the only thing affecting battery life, and we know Google is likely changing the supplier of a bunch of hardware this year — including the Tensor G6 chip and the modem. This may end up having a positive impact on power efficiency, which in turn means larger batteries aren't entirely necessary. </p><p>But it doesn't change the fact that I am a little worried. Google does not have a good track record of this, and considering how much better battery life has been in recent Pixel releases, any potential for a dip is a bad thing.</p></div><div class="live-content"><time datetime="2026-08-12T13:49:02+00:00">August 12, 2026 – 9:49 AM</time><h2 id="pro-res-zoom-on-the-pixel-11-pros-could-go-up-to-120x">Pro Res Zoom on the Pixel 11 Pros could go up to 120x</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/25wio4SMCrCEXkiB8F54rn.jpg" alt="Google Pixel 10 Pro XL Pro Res Zoom sample." /><figcaption><small role="credit">Tom's Guide / John Velasco</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QmYLcCune3ukDU8yNr2Ztn.jpg" alt="Google Pixel 10 Pro XL Pro Res Zoom sample." /><figcaption><small role="credit">Tom's Guide / John Velasco</small></figcaption></figure></figure><p>One of the best examples of AI being extremely helpful is <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-captured-these-100x-pro-res-zoom-photos-with-the-pixel-10-pro-xl-and-the-results-blew-me-away">Pro Res Zoom</a> on the Pixel 10 Pros. This AI-assisted feature enhances zoom photos at 30X and beyond by adding sharpness, detail and clarity to what would otherwise be soft zoom photos. Google's reportedly going to upgrade this with the Pixel 11 Pros by extending the zoom to an even astounding 120x zoom level. Paired with Pro Res Zoom, it should put rival phones like the Galaxy S26 Ultra and iPhone 17 Pro Max on notice.</p></div><div class="live-content"><time datetime="2026-08-12T14:05:30+00:00">August 12, 2026 – 10:05 AM</time><h2 id="say-hello-to-the-new-pixel-11-pro">Say hello to the new Pixel 11 Pro!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cueBgSYeqbwAUtwBXcnFRo" name="Google Pixel 11 Pro hands-on" alt="Google Pixel 11 Pro hands-on." src="https://cdn.mos.cms.futurecdn.net/cueBgSYeqbwAUtwBXcnFRo.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>That's right folks! Google's not waiting until later today to unveil its new Pixel 11 lineup. I got the chance to take a look at what I feel is the most notable of the bunch, the Pixel 11 Pro, which features camera upgrades, a new HighLight LED on the back, new Gemini Intelligence features, and more.</p><p>Yes, it does get a $100 price hike, but find out why I think it has the most value in the lineup.</p><p><strong>Read more: </strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11 Pro hands-on</a></p></div><div class="live-content"><time datetime="2026-08-12T14:12:00+00:00">August 12, 2026 – 10:12 AM</time><h2 id="pixel-11-pro-fold-has-unmatched-rugged-durability">Pixel 11 Pro Fold has unmatched rugged durability</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3472px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DnGKx5RZ8krFxvpYrGwsLb" name="Google Pixel 11 Pro Fold LIST1" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/DnGKx5RZ8krFxvpYrGwsLb.jpg" mos="" align="middle" fullscreen="" width="3472" height="1953" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Google's Pixel 11 Pro Fold</a> sets a new benchmark for foldables by introducing the brightest displays ever seen in the category, reaching an impressive peak brightness of 3,600 nits across both its main and cover screens according to Google.</p><p>Combined with full IP68 dust and water resistance and a shatterproof glass composite back, it pairs class-leading outdoor visibility with robust daily durability. And at $1,899, it offers a flagship foldable experience packed with proactive Gemini Intelligence tools and $200 less than its chief competition in the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>.</p></div><div class="live-content"><time datetime="2026-08-12T14:17:19+00:00">August 12, 2026 – 10:17 AM</time><h2 id="hilight-led-is-it-practical-or-a-gimmick">HiLight LED: is it practical or a gimmick?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Tjhq9hW9rpYFfxrLwyKxw5" name="Pixel 11 Pro and Pro XL - HiLight LED.GIF" alt="Pixel 11 Pro and Pro XL HiLight LED." src="https://cdn.mos.cms.futurecdn.net/Tjhq9hW9rpYFfxrLwyKxw5.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a> series introduces the HiLight LED, a customizable rear light ring designed to make at-a-glance notifications effortless when your phone is resting face down. Users can assign distinct color profiles to specific contacts or app alerts, instantly revealing who is reaching out without needing to lift the device.</p><p>Aside from also turning on for Gemini commands, it's limited to just  incoming calls — with Google exploring the option to integrate it with text message notifications. We spent some time checking it out and so far the consensus is that it's more gimmicky than anything else. What do you think?</p></div><div class="live-content"><time datetime="2026-08-12T14:22:50+00:00">August 12, 2026 – 10:22 AM</time><h2 id="does-the-pixel-11-pro-fold-beat-the-galaxy-z-fold-8-ultra">Does the Pixel 11 Pro Fold beat the Galaxy Z Fold 8 Ultra?</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><p>In our <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold hands-on</a> video, we explain whether the Pixel 11 Pro Fold edges out the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a> by comparing real-world usability, screen brightness, and overall value.</p><p>Google's asserting how the Pixel 11 Pro Fold's durability is way superior than any other notebook-style foldable on the market, including its main rival in the Galaxy Z Fold 8 Ultra. Key highlights include the phone's 3,600-nit peak display brightness, IP68 dust-and-water resistance, built-in magnetic wireless charging, and creator-focused tools like Magic Capture and Creative Studio.</p></div><div class="live-content"><time datetime="2026-08-12T14:28:34+00:00">August 12, 2026 – 10:28 AM</time><h2 id="pixel-watch-5-offers-blood-pressure-and-insulin-resistance-trends">Pixel Watch 5 offers blood pressure and insulin resistance trends</h2><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="JZMdEhCefXJVUM4st7sqRi" name="Google Pixel Watch 5--15" alt="Hands-on with the new Google Pixel Watch 5" src="https://cdn.mos.cms.futurecdn.net/JZMdEhCefXJVUM4st7sqRi.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: John Velasco/Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tried-the-new-google-pixel-watch-5-and-its-new-health-and-safety-features-blow-the-apple-watch-out-of-the-water">Google Pixel Watch 5</a> keeps the sleek design of its predecessor while introducing critical new health and safety innovations, led by a life-saving Breathing Emergency Detection feature.</p><p>Alongside enhanced GPS accuracy and faster processing power, it's health-focused abilities extend to tracking blood pressure and insulin resistance trends — a first for the series. Although a price hike across both the 41mm and 45mm models makes it a bit pricier, its proactive Gemini AI capabilities and advanced monitoring make a compelling case over competing smartwatches.</p></div><div class="live-content"><time datetime="2026-08-12T14:33:57+00:00">August 12, 2026 – 10:33 AM</time><h2 id="pixel-tag-does-this-one-critical-thing-that-the-airtag-doesn-t">Pixel Tag does this one critical thing that the AirTag doesn't</h2><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="owkFBn2BQSWMdGULrJaEUe" name="Google Pixel Tag hands-on" alt="Google Pixel Tag hands-on." src="https://cdn.mos.cms.futurecdn.net/owkFBn2BQSWMdGULrJaEUe.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>Personally, I hate that I'm sent only one low battery notification with the <a href="https://www.tomsguide.com/phones/apple-airtag-2-review">AirTag 2</a> — and this is exactly what makes the new <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">Google Pixel Tag</a> way better! Not only does it land at the same $29 price point, but I'm stoked that it will send low-battery reminders every two weeks until the battery dies.</p><p>If that's not enough to convince you it's better than the AirTag 2, it has a slimmer stainless steel and polycarbonate design, features a physical button that enables reverse phone-finding, Ultra-Wideband support, and it also allows sharing with up to 10 users.</p></div><div class="live-content"><time datetime="2026-08-12T14:47:15+00:00">August 12, 2026 – 10:47 AM</time><h2 id="magic-capture-is-genuinely-one-of-those-helpful-ai-features">Magic Capture is genuinely one of those helpful AI features</h2><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="g64f9rWzFjvpmDbyGsoVGP" name="Google Pixel 11 Pro Fold-6" alt="Pixel 11 Pro Fold hands on" src="https://cdn.mos.cms.futurecdn.net/g64f9rWzFjvpmDbyGsoVGP.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: Tom's Guide)</span></figcaption></figure><p>Google's known for all of its AI tools and features, and this year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a> lineup is no exception. Out of all the new stuff we got a first look at, Magic Capture is by far the most captivating and practical one. </p><p>Magic Capture is a standalone camera mode that eliminates the need to choose between shooting photos or video. We saw it in action with a pair of ballet dancers at Google's event and it's one of those features that genuinely works well. In this mode, you record video while on-device AI concurrently extracts, crops, and unblurs key action moments into photos. By automatically curating share-ready stills from live action without requiring manual shutter timing, it allows shooter to stay more present during fast-moving events like sports, concerts, or family gatherings.</p></div><div class="live-content"><time datetime="2026-08-12T15:19:38+00:00">August 12, 2026 – 11:19 AM</time><h2 id="the-pixel-11-pro-fold-turns-into-the-ultimate-teleprompter">The Pixel 11 Pro Fold turns into the ultimate teleprompter</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3061px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="gHHVn2Hv7hqwZcsEKi9UZh" name="Google Pixel 11 Pro Fold-8" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/gHHVn2Hv7hqwZcsEKi9UZh.jpg" mos="" align="middle" fullscreen="" width="3061" height="1722" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We're in the age of influence and Google is certainly aware of this. That's why it's offering Creative Studio, which we got a demo of on the new <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold</a>. It's a suite of video and content creation tools designed to turn the phone into a portable production rig.</p><p>By leveraging the Pixel 11 Pro Fold’s flexible form factor, it includes features like built-in teleprompter controls and hands-free framing for solo creators. And though software controls directly with the device's hardware, it allows users to monitor, script, and record high-quality vlogs and videos on the go without needing extra accessories.</p></div><div class="live-content"><time datetime="2026-08-12T15:44:29+00:00">August 12, 2026 – 11:44 AM</time><h2 id="pixel-11-gets-a-100-price-increase">Pixel 11 gets a $100 price increase</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4192px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tz7X2mBLxChtjfsg5nAkzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/tz7X2mBLxChtjfsg5nAkzf.jpg" mos="" align="middle" fullscreen="" width="4192" height="2358" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>First and foremost, you should know that the entry-level Pixel 11 costs $100 more than last year with an $899 starting cost. Considering how last year's Pixel 10 was a major overhaul, I'm not surprised that Google is a bit lax with the upgrades with the Pixel 11.</p><p>A few of its notable upgrades include the Tensor G6 chip, larger 4,985 mAh battery, faster 25W wired and 25W wireless charging speeds, larger main camera sensor, 30x Super Zoom, and the same Gemini Intelligence features as its Pro siblings.</p></div><div class="live-content"><time datetime="2026-08-12T16:17:40+00:00">August 12, 2026 – 12:17 PM</time><h2 id="pixel-11-pro-fold-vs-galaxy-z-fold-8-ultra-which-foldable-would-you-get">Pixel 11 Pro Fold vs. Galaxy Z Fold 8 Ultra: which foldable would you get?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3223px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RuS339tv62jjRaVhiNzxHP" name="Google Pixel 11 Pro Fold-5" alt="Pixel 11 Pro Fold hands on" src="https://cdn.mos.cms.futurecdn.net/RuS339tv62jjRaVhiNzxHP.jpg" mos="" align="middle" fullscreen="" width="3223" height="1813" 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's no arguing that the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold</a> directly challenges the Galaxy Z Fold 8 Ultra, but does undercutting its rival by $200 really makes it the superior foldable phone?</p><p>Although Samsung holds a clear edge in thinness, weight, and a less noticeable display crease, Google counters with a vastly brighter 3,600-nit panel, full IP68 dust-and-water resistance, a shatterproof glass composite back, and a wider 6.5-inch cover screen that feels less cramped for daily typing. There's also their triple cameras, with the Pixel 11 Pro Fold still offering a longer 5x optical zoom. And paired with built-in magnetic wireless charging courtesy of Pixelsnap, and a smarter suite of proactive Gemini AI features,  it feels like a more complete device.</p></div><div class="live-content"><time datetime="2026-08-12T16:57:38+00:00">August 12, 2026 – 12:57 PM</time><h2 id="will-it-be-powerful-enough">Will it be powerful enough?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2025px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="Fudiia9dAiNt5cGSDLMqKm" name="tensor2.jpg" alt="Google Pixel Event Tensor chip screenshot" src="https://cdn.mos.cms.futurecdn.net/Fudiia9dAiNt5cGSDLMqKm.jpg" mos="" align="middle" fullscreen="" width="2025" height="1137" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We've had some <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend#section-pixel-11-vs-pixel-11-pro-vs-pixel-11-pro-xl-performance">hands-on time</a> with the new phones, and they do feel "snappy out of the gate."</p><p>However, before today's launch, a new <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-xl-benchmarks-leak-and-tensor-g6-is-96-percent-slower-than-galaxy-s26-ultra">Geekbench leak revealed scores</a> that suggest the Pixel 11 Pro XL lags behind Samsung and Apple offerings by a significant amount.</p><p>We'll run our own tests, but those early tests don't look great.</p></div><div class="live-content"><time datetime="2026-08-12T17:26:47+00:00">August 12, 2026 – 1:26 PM</time><h2 id="colorful-lineup">Colorful lineup</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4192px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tz7X2mBLxChtjfsg5nAkzf" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/tz7X2mBLxChtjfsg5nAkzf.jpg" mos="" align="middle" fullscreen="" width="4192" height="2358" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The Pixel 11 series is a surprisingly colorful lineup. The four available hues include hibiscus, pistachio, frost, and obsidian. </p><p>If you like your phones to look a little fun, the Pixel 11 certainly has you set.</p></div><div class="live-content"><time datetime="2026-08-12T17:55:50+00:00">August 12, 2026 – 1:55 PM</time><h2 id="the-summer-of-foldables-get-a-new-contender">The summer of foldables get a new contender</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4733px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="zuwjc6dCyBhA5VjLjLWxQb" name="Google Pixel 11 Pro Fold-7" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/zuwjc6dCyBhA5VjLjLWxQb.jpg" mos="" align="middle" fullscreen="" width="4733" height="2662" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We've had some early <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">hands-on time with the new Pixel 11 Pro Fold,</a> and it is pretty impressive, especially compared to the Galaxy Z Fold 8 Ultra. </p><p>It's $200 less, even with the hike, features an amazingly bright display, a shatterproof back and smarter Gemini AI features.</p><p>"Overall, I’d be pretty torn between the Pixel 11 Pro Fold and Galaxy Z Fold 8 Ultra. But I’ll have to do some in-depth testing to see which one I’d buy with my own money," Tom's Guide global editor Mark Spoonauer said.</p></div><div class="live-content"><time datetime="2026-08-12T18:41:32+00:00">August 12, 2026 – 2:41 PM</time><h2 id="holding-the-pixel-tag">Holding the Pixel Tag</h2><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="kqbfghowtgi2Z5x6ez2AQe" name="Google Pixel Tag hands-on" alt="Google Pixel Tag hands-on." src="https://cdn.mos.cms.futurecdn.net/kqbfghowtgi2Z5x6ez2AQe.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>The Pixel 11 phones are fun and all, but the most intriguing device launching today might be <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">the new Pixel Tag.</a> </p><p>The tiny tracker is Google's direct response to the Apple AirTag 2, with a sleek design, a year's worth of battery life, a $29 price tag and more.</p><p>Nicely, compared to Apple, when the battery gets low, the Pixel Tag will send low-battery notifications every two weeks until it dies.</p></div><div class="live-content"><time datetime="2026-08-12T18:57:33+00:00">August 12, 2026 – 2:57 PM</time><h2 id="what-are-you-interested-in-seeing">What are you interested in seeing?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5963px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4cLTAEnni5nnA4PKm7Kv9g" name="Google Pixel 11 hands on" alt="Google Pixel 11 hands-on." src="https://cdn.mos.cms.futurecdn.net/4cLTAEnni5nnA4PKm7Kv9g.jpg" mos="" align="middle" fullscreen="" width="5963" height="3354" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Google has several intriguing devices launching today from the new phones to the upgraded Pixel Watch and the new Pixel Tag.</p><p>What are you interested in seeing? </p><p>Let us know in the comments!</p></div><div class="live-content"><time datetime="2026-08-12T19:28:07+00:00">August 12, 2026 – 3:28 PM</time><h2 id="what-else-could-google-announce-at-its-event-now-that-the-pixel-11-is-official">What else could Google announce at its event now that the Pixel 11 is official?</h2><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="LmeePyFfScRBwtPjJKrxA9" name="Googlebook-LIST" alt="Googlebook image" src="https://cdn.mos.cms.futurecdn.net/LmeePyFfScRBwtPjJKrxA9.jpg" mos="" align="middle" fullscreen="" width="4000" height="2250" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We're still a few hours away from the start of the Made by Google 2026 event, which is being held live in New York City. But considering that the company ended up unveiling its <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend">Pixel 11</a> lineup and other gadgets earlier this morning, it does make us wonder what else could be shown at the event.</p><p>Perhaps we could get teasers on some other projects the company's been working on? Maybe we'll finally see more <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebooks</a> from other PC makers? Or perhaps we'll get even more details around some of the <a href="https://www.tomsguide.com/computing/smart-glasses/exclusive-inside-googles-plan-to-win-over-your-face-with-ai-glasses-and-avoid-metas-privacy-missteps">smart glasses</a>?</p></div><div class="live-content"><time datetime="2026-08-12T20:00:34+00:00">August 12, 2026 – 4:00 PM</time><h2 id="seeing-gemini-omni-in-action-on-the-pixel-11-pro-is-impressive">Seeing Gemini Omni in action on the Pixel 11 Pro is impressive</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2290px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="KASwcfsqwhnV7CnFtSgv6Y" name="Gemini Omni" alt="gemini omni" src="https://cdn.mos.cms.futurecdn.net/KASwcfsqwhnV7CnFtSgv6Y.jpg" mos="" align="middle" fullscreen="" width="2290" height="1288" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>In my hands-on time with the Pixel 11 Pro and Pixel 11 Pro XL, I got a quick demo of Gemini Omni. It's one of many new models that the company first announced at Google I/O 2026, but it's something you'll be able to tap into on these new devices.</p><p>What's really impressive about this multi-modal model is how it can create videos in many ways. The demo I got showed off an existing video that needed to be edited to swap out a logo that popped up during the video. So, I shot a photo using the Pixel 11 Pro of this pizza slice I captured and asked Gemini to swap it — but with a slight twist. Instead of the cartoony look from the photo I shot, I asked Gemini to re-render the clip and make it so that the pizza slice was in a Chrome aesthetic. And just like that, it did exactly what I wanted.</p></div><div class="live-content"><time datetime="2026-08-12T20:32:15+00:00">August 12, 2026 – 4:32 PM</time><h2 id="google-has-only-one-foldable-phone-is-that-enough">Google has only one foldable phone — is that enough?</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7673134746834193678" data-video-id="7673134746834193678" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ Retro Highway - Nostalgia Waves" href="https://www.tiktok.com/music/Retro-Highway-7438814424347035664">♬ Retro Highway - Nostalgia Waves</a></section>                    </blockquote></div>                <p>Google's fairly new to the world of foldables compared to rivals Motorola and Samsung. Given the huge pre-order success of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> specifically, it does beg the question whether Google got it right with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">Pixel 11 Pro Fold</a>.</p><p>Sure, the design's way more durable and it comes with what's arguably the best camera setup in any foldable phone. However, do you think it's enough to steer consumers towards it? Considering how leaks indicate that Apple's shaping up to go after a wider form factor with its <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-delay-leak-right-after-samsungs-triumphant-galaxy-fold-8-launch-has-me-sick-of-waiting-for-apples-foldable">iPhone Ultra</a>, it does make us wonder even more about the Pixel 11 Pro Fold's broader appeal compared to other foldables.</p></div><div class="live-content"><time datetime="2026-08-12T21:06:05+00:00">August 12, 2026 – 5:06 PM</time><h2 id="you-can-use-pixel-tag-to-ring-your-phone">You can use Pixel Tag to ring your phone</h2><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="njRMximS2hbFnr5jR3xWTe" name="Google Pixel Tag hands-on" alt="Google Pixel Tag hands-on." src="https://cdn.mos.cms.futurecdn.net/njRMximS2hbFnr5jR3xWTe.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: John Velasco / Tom's Guide)</span></figcaption></figure><p>While I can find a missing AirTag with my iPhone, I can't do the opposite. This is exactly what makes the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">Pixel Tag</a> special because there's a button on the back that can be used to ring your phone. It's brilliant honestly and just one of many reasons why I think it's super than the AirTag 2.</p></div><div class="live-content"><time datetime="2026-08-12T21:27:49+00:00">August 12, 2026 – 5:27 PM</time><h2 id="we-re-in">We're in</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HPB8RqRMXKtu2rNpc5ZHzf" name="IMG_2287" alt="Made by Google - Pixel 11 event 2026" src="https://cdn.mos.cms.futurecdn.net/HPB8RqRMXKtu2rNpc5ZHzf.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Made by Google event doesn't start for another 30 minutes, give or take, but we're inside the building and ready to see what Google has to say since it already revealed its devices.</p></div><div class="live-content"><time datetime="2026-08-12T21:45:34+00:00">August 12, 2026 – 5:45 PM</time><h2 id="behind-the-scenes">Behind the scenes</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Tdgj6iKKSZsARDxXjJmeXF.jpg" alt="Behind the scenes-ish at Made by Google 2026" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kHZLTjfXLZpxA4rZc9jzfF.jpg" alt="Behind the scenes-ish at Made by Google 2026" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/nuhF5WPRPmb8cCbZUtBfWF.jpg" alt="Behind the scenes-ish at Made by Google 2026" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Aed3fYxEFywdm2mV4yQFXF.jpg" alt="Behind the scenes-ish at Made by Google 2026" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/75gMb58NmTPAE2vwJgMcAD.jpg" alt="Behind the scenes-ish at Made by Google 2026" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>While we wait, here's a little behind the scenes peek at what we can see from our seats.</p></div><div class="live-content"><time datetime="2026-08-12T21:56:21+00:00">August 12, 2026 – 5:56 PM</time><h2 id="5-minutes-to-showtime">5 minutes to showtime</h2><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="ThTTAFJCAid8NgCxbiXy7G" name="IMG_2322" alt="DJ spinning at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/ThTTAFJCAid8NgCxbiXy7G.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: Tom's Guide)</span></figcaption></figure><p>Just in case you're wondering, no this won't be shot on Google Pixel.</p><p>Meanwhile a DJ spins.</p></div><div class="live-content"><time datetime="2026-08-12T22:02:05+00:00">August 12, 2026 – 6:02 PM</time><h2 id="and-we-re-off">And we're 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TJ6BmPEVVqU7nTuPWfFh7N" name="Made by Google '26 15-10 screenshot" alt="Trevor Noah kicking off Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/TJ6BmPEVVqU7nTuPWfFh7N.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Here we go, Trevor Noah is here to host the event and it looks like several celebs including Steph Curry, Alex Cooper and Shubman Gil will be showing off.</p></div><div class="live-content"><time datetime="2026-08-12T22:04:18+00:00">August 12, 2026 – 6:04 PM</time><h2 id="our-first-rick-osterloh-appearance">Our first Rick Osterloh appearance</h2><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="mqdJpaQSQAJz9ZpaccDoRW" name="Made by Google '26 16-32 screenshot" alt="Rick Osterloh entrance" src="https://cdn.mos.cms.futurecdn.net/mqdJpaQSQAJz9ZpaccDoRW.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's head of devices Rick Osterloh is Trevor's interview. </p><p>"Phones and laptops haven't really changed much in the last 15 years. We're in one of those rare leaps forward."</p></div><div class="live-content"><time datetime="2026-08-12T22:05:36+00:00">August 12, 2026 – 6:05 PM</time><h2 id="here-s-what-i-can-see-from-the-show-floor">Here's what I can see from the show floor</h2><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="CotzeAYK2xLMJ66nXAn5Yf" name="IMG_2333" alt="Behind the scenes at Made by Google 2026 in NYC" src="https://cdn.mos.cms.futurecdn.net/CotzeAYK2xLMJ66nXAn5Yf.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: Tom's Guide)</span></figcaption></figure><p>You may have a better view of this interview than I do if you're streaming on <a href="https://www.youtube.com/live/c84y9gAY90c" target="_blank">YouTube</a>.</p></div><div class="live-content"><time datetime="2026-08-12T22:07:12+00:00">August 12, 2026 – 6:07 PM</time><h2 id="talking-ai">Talking AI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QBCBfengL6i4xnGPWMA6S8" name="Made by Google '26 20-16 screenshot" alt="Rick explaining Gemini to Trevor Noah" src="https://cdn.mos.cms.futurecdn.net/QBCBfengL6i4xnGPWMA6S8.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>"AI means Gemini," Osterloh says. Notes that more than 1 billion people use the AI model. </p><p>Now you can ask Gemini to get things done for you, Osterloh says. Examples he gives includes drafting emails, locations, times and RSVPs for his weekly basketball game.</p></div><div class="live-content"><time datetime="2026-08-12T22:10:24+00:00">August 12, 2026 – 6:10 PM</time><h2 id="gemini-intelligence">Gemini Intelligence</h2><p>"Gemini is no longer an operating system that helps you use your phone. It helps get things done. You can get a lot more done in a lot less time."</p><p>"We're also using Gemini to reimagine devices that people have taken for granted." Rick listed off laptops, phones, cars and teased Intelligent Eyewear.</p><p>"The big idea today is we're building future all abou the technology that helps you stay in the moment instead of taking you out of it."</p></div><div class="live-content"><time datetime="2026-08-12T22:13:25+00:00">August 12, 2026 – 6:13 PM</time><h2 id="isabelle-olsson">Isabelle Olsson</h2><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="DsUEnv3LNpoQwYiZ6zNp6e" name="Made by Google '26 24-9 screenshot" alt="Isabelle Olsson at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/DsUEnv3LNpoQwYiZ6zNp6e.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's Isabelle Olsson has stepped out to discuss the design of the new Pixel 11 series.</p><p>Specifically, how they came up with the colors for the lineup, like hibiscus, one of the bolder colors this year. </p></div><div class="live-content"><time datetime="2026-08-12T22:16:18+00:00">August 12, 2026 – 6:16 PM</time><h2 id="pixel-11-camera">Pixel 11 camera</h2><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="QCsokwSpjKA3QUuTDSuYhG" name="Made by Google '26 28-47 screenshot" alt="Pixel 11 screen at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/QCsokwSpjKA3QUuTDSuYhG.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Olsson says the camera array is slimmer today even with a new main camera. The camera bar is also wrapped in "sleek metal".</p><p>She also talked briefly about the foldable display on the Pixel 11 Pro Fold. </p></div><div class="live-content"><time datetime="2026-08-12T22:17:30+00:00">August 12, 2026 – 6:17 PM</time><h2 id="steph-curry-designed-a-band-for-pixel-watch-5">Steph Curry designed a band for Pixel Watch 5</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pBQEHVQHjyR8qv7NntJ8MP" name="Made by Google '26 29-45 screenshot" alt="Pixel Watch 5 bands at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/pBQEHVQHjyR8qv7NntJ8MP.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>One of the bands you can get for the Pixel Watch 5 was apparently designed by NBA star Steph Curry, who has worked as a health ambassador for Google for the last year.</p></div><div class="live-content"><time datetime="2026-08-12T22:20:28+00:00">August 12, 2026 – 6:20 PM</time><h2 id="durable-devices">Durable 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8AydoC5aP3tr6JAJsSzuFg" name="Made by Google '26 32-6 screenshot" alt="Pixel 11 drop testing at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/8AydoC5aP3tr6JAJsSzuFg.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>One point of pride from our hands on sessions earlier today to this show, Google seems very keen on its the durability of every new device shown today. </p><p>A new film is supposed to make them more scratch resistant. The backpanel on the Pixel 11 phones is supposed to be uncrackable.</p><p>Olsson said that the Google team tested the new display by opening it over 83 million times. Even the foldable has a strong IP water resistance rating.</p><p>The crowd at the show really liked the 83 million stat.</p></div><div class="live-content"><time datetime="2026-08-12T22:22:49+00:00">August 12, 2026 – 6:22 PM</time><h2 id="ayami-nakajo">Ayami Nakajo</h2><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="qUCbFNJf2ziMZYdUzbhHzB" name="Made by Google '26 35-13 screenshot" alt="Pixel 11 fit check at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/qUCbFNJf2ziMZYdUzbhHzB.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Model and actor Ayami Nakajo shows off some of the colors of the new Pixel lineup, from hibiscus to obsidian. </p><p>Apparently, there's a new Google store in Tokyo that opens today.</p><p>And that's it.</p></div><div class="live-content"><time datetime="2026-08-12T22:25:08+00:00">August 12, 2026 – 6:25 PM</time><h2 id="pixel-camera-improvements">Pixel Camera improvements</h2><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="o89wsK2o2TjCHKbJbDMnzN" name="Made by Google '26 36-48 screenshot" alt="Pixel 11 camera deconstructed at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/o89wsK2o2TjCHKbJbDMnzN.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We'll put the Pixel 11 cameras through the paces soon but it comes with 120x zoom and a new Instant Night Site mode for night photography.</p></div><div class="live-content"><time datetime="2026-08-12T22:26:03+00:00">August 12, 2026 – 6:26 PM</time><h2 id="15-minute-charging-time">15 minute charging time</h2><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="LGdtSjLgYALPPsYbE9RguW" name="Made by Google '26 38-12 screenshot" alt="Pixel 11 Pro battery life at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/LGdtSjLgYALPPsYbE9RguW.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>For both the Watch 5 and 11 phones, apparently it only takes 15 minutes to charge them to mostly full.</p><p>15 minutes for 15 hours on the phones and 15 minutes for a full day on the watch.</p></div><div class="live-content"><time datetime="2026-08-12T22:29:56+00:00">August 12, 2026 – 6:29 PM</time><h2 id="it-s-interesting-how-different-the-lighting-looks">It's interesting how different the lighting looks</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aF5apG7qqc9Eem5YFQUp7C" name="IMG_2379" alt="More behind the scenes at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/aF5apG7qqc9Eem5YFQUp7C.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>From where we're sitting, it's interesting how different the lighting looks in our cameras versus on the livestream.</p></div><div class="live-content"><time datetime="2026-08-12T22:33:14+00:00">August 12, 2026 – 6:33 PM</time><h2 id="hilite">HiLite</h2><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="3wttfSLJ9JxqQeqU5CJdJT" name="Made by Google '26 44-29 screenshot" alt="Toni Urban at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/3wttfSLJ9JxqQeqU5CJdJT.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's Toni Urban has entered the show to talk about the new HiLite feature which lets you know when lets you assign groups or people one of five colors. The phone will glow, letting you know that they're reaching out to you.</p><p>Pink, purple, and teal are among the 5 colors. Apparently, red is not one of them.</p></div><div class="live-content"><time datetime="2026-08-12T22:35:19+00:00">August 12, 2026 – 6:35 PM</time><h2 id="dj-peggy-guo-demonstrates-hilite">DJ Peggy Guo demonstrates HiLite</h2><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="KB6UohsM2kovGy7Ga2gajg" name="Made by Google '26 46-49 screenshot" alt="Peggy Gou at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/KB6UohsM2kovGy7Ga2gajg.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>DJ Peggy Guo came out to demonstrate how HiLite works by calling Toni Urban and the LED in the camera glowed teal.</p><p>It's pretty simple, but I wonder how long it stays and how easy it is to miss.</p></div><div class="live-content"><time datetime="2026-08-12T22:38:55+00:00">August 12, 2026 – 6:38 PM</time><h2 id="juju-watkins-and-jesser">Juju Watkins and Jesser</h2><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="x6m25quwmP3Gu2CpR42XgG" name="IMG_2409" alt="Behind the scenes for a live demo at Made by Google 2026" src="https://cdn.mos.cms.futurecdn.net/x6m25quwmP3Gu2CpR42XgG.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: Tom's Guide)</span></figcaption></figure><p>Juju Watkins and some Youtuber Jesser showcase the new Magic Capture which is supposed to highlight and pull photos for you from a moment.</p><p>Apparently, it pulls from up to 400 frames to find interesting photos in a moment.</p></div><div class="live-content"><time datetime="2026-08-12T22:43:33+00:00">August 12, 2026 – 6:43 PM</time><h2 id="it-s-time-to-talk-ai">It's time to talk AI </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4R5e9MQTMaU6Wi2jYSBUbj" name="Made by Google '26 54-20 screenshot" alt="Stephanie Scott at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/4R5e9MQTMaU6Wi2jYSBUbj.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Stephanie Scott of the Pixel product team is here to talk AI.</p><p>Scott says Pixel was designed for Gemini Intelligence. In her example, the AI pulls together your calendar and determines things like if you have availability and add things to your calendar. </p><p>Apparently, this also works with Pixel watch where it will add things to your calendar and give you texting suggestions, plus pinch controls.</p></div><div class="live-content"><time datetime="2026-08-12T22:49:12+00:00">August 12, 2026 – 6:49 PM</time><h2 id="new-rambler-feature">New Rambler feature</h2><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="jCNFRLdQdeMxLdnKdjEeHS" name="Made by Google '26 58-47 screenshot" alt="Joel Yawili at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/jCNFRLdQdeMxLdnKdjEeHS.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Joel Yawili, who apparently is also from Johannesburg, South Africa, to discuss how naturally you can speak to the Pixel phone and it will type for you.</p><p>It's part of the new rambler feature which will take out hitches and edits while you talk.</p><p>The phone is supposed to make sense of not just what you said but also what you meant.</p></div><div class="live-content"><time datetime="2026-08-12T22:55:13+00:00">August 12, 2026 – 6:55 PM</time><h2 id="pixel-can-understand-american-sign-language">Pixel can understand American Sign Language</h2><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="xm3e2YUB8HaSKUxWxFpMJc" name="Made by Google '26 1-7-30 screenshot" alt="ASL live translation demo at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/xm3e2YUB8HaSKUxWxFpMJc.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>One of the few things I'm interested in AI for is live translation. Google brought out actor Daniel Durant who used ASL to talk to the phone.</p><p>The phone then translated his gestures from ASL to English and read it aloud. Pretty cool.</p><p>It also transcribed vocal speech as well.</p><p>They did note that this feature is in its early stages.</p></div><div class="live-content"><time datetime="2026-08-12T23:02:30+00:00">August 12, 2026 – 7:02 PM</time><h2 id="high-claims-from-google-on-what-the-pixel-watch-5-can-track-for-health">High claims from Google on what the Pixel Watch 5 can track for health</h2><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="VZDJP4XATiWrdpN3maknSd" name="Made by Google '26 1-14-50 screenshot" alt="Blood pressure tracking on Pixel Watch 5 at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/VZDJP4XATiWrdpN3maknSd.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Health Guardian features are meant to give "more visibility" in big health issues, including blood pressure, insulin resistance, and breathing emergency trends.</p><p>In some cases, like the breathing emergency detector it will call emergency services for you. But it's starting in Europe.</p></div><div class="live-content"><time datetime="2026-08-12T23:07:00+00:00">August 12, 2026 – 7:07 PM</time><h2 id="google-claims-its-pixel-watch-heart-tracker-is-as-good-as-a-chest-tracker">Google claims its Pixel Watch heart tracker is as good as a chest tracker</h2><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="WwL7N3QMuU52BwGM4Yikf9" name="IMG_2466" alt="Behind the scenes at Made By Google 2026 with Olympian Chari Hawkins" src="https://cdn.mos.cms.futurecdn.net/WwL7N3QMuU52BwGM4Yikf9.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: Tom's Guide)</span></figcaption></figure><p>In discussion with Olympian Chari Hawkins, Google's Noah Presler claimed that the Pixel Watch 5 has a heart rate tracker as good as one that you would wear on your chest. </p><p>There's also an AI coach that tracks your sleep and body to suggest workouts based on how your body is actually responding.</p></div><div class="live-content"><time datetime="2026-08-12T23:10:40+00:00">August 12, 2026 – 7:10 PM</time><h2 id="super-accurate-gps-on-pixel-watch">Super accurate GPS on Pixel Watch</h2><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="X8bZ3aBuQKdmi6FBHTDpa5" name="Made by Google '26 1-16-58 screenshot" alt="Chari Hawkins Olympian at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/X8bZ3aBuQKdmi6FBHTDpa5.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Another bold claim we'll need to test. Presler said that the GPS tracking on the Pixel Watch 5 can use both atmospheric stations and satellites to accurately track you for routes. </p><p>He also said it was more accurate than the Garmin Fenix and Apple Watch Ultra 3. That's one we'll put to the test when we have all three on hand.</p></div><div class="live-content"><time datetime="2026-08-12T23:16:10+00:00">August 12, 2026 – 7:16 PM</time><h2 id="switching-is-supposed-to-be-easier">Switching is supposed to be easier</h2><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="9pabcqr7HiHF58uCKgHSUT" name="IMG_2476" alt="Alex Cooper at Made By Google 2026 behind the scenes" src="https://cdn.mos.cms.futurecdn.net/9pabcqr7HiHF58uCKgHSUT.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: Tom's Guide)</span></figcaption></figure><p>Alex Cooper of Call Me Daddy is hosting a segment about switching from say Apple to Pixel if you want. </p><p>Photos, files, group chats, data transfers and location sharing are supposed to be easier now. Google says it worked with Apple to make this process easier.</p></div><div class="live-content"><time datetime="2026-08-12T23:20:56+00:00">August 12, 2026 – 7:20 PM</time><h2 id="yes-that-was-one-of-us">Yes that was one of us</h2><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="2Jwk48puAqhvJVobnETfc8" name="Made by Google '26 1-31-32 screenshot" alt="Major football clubs are now on Pixel at Made By Google 2026" src="https://cdn.mos.cms.futurecdn.net/2Jwk48puAqhvJVobnETfc8.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>You may have heard there are some football fans in the crowd. Yes, that was us. </p></div><div class="live-content"><time datetime="2026-08-12T23:24:55+00:00">August 12, 2026 – 7:24 PM</time><h2 id="that-s-the-show">That's the show</h2><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="utrLUY746QG8zLTDeCSArf" name="Made by Google '26 1-36-30 screenshot" alt="Made By Google 2026 that's a wrap" src="https://cdn.mos.cms.futurecdn.net/utrLUY746QG8zLTDeCSArf.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>With PinkPantheress done, that's the show. Thanks for following along with this. </p><p>If you missed it, we already have hands on articles on every device announced today which you can check out. We'll have full reviews coming soon. </p><p>And don't just wait for the full reviews, we'll also put these devices to the test against top offerings from other companies including Apple, Samsung, Garmin and more. </p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 Pro XL benchmarks leak — and Tensor G6 is nearly 50% slower than Galaxy S26 Ultra ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google is launching the new Pixel 11 series at its <a href="https://www.tomsguide.com/phones/google-pixel-phones/how-to-watch-made-by-google-2026">Made by Google event </a>today. Unfortunately, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro XL</a> just popped up on Geekbench, revealing a phone that might not be able to keep up with the competition.</p><p>With the caveat that Geekbench listings can be faked, this doesn't look good. </p><p>We've seen<a href="https://browser.geekbench.com/v7/cpu/112092" target="_blank"> one Geekbench listing</a> for the Pixl 11 Pro XL, which reveals the new Tensor G6 chipset. The tested G6 has 7 cores with 16GB of RAM and appears to be running Android 17 out of the box. </p><p>If you're unfamiliar with Geekbench, the test utilizes several tests to see how a CPU in a phone handles certain tasks. Single-core refers to how one core (or "mini-brain") handles a single task, like, say, photo editing. Multicore refers to how all the cores handle multitasking, such as running several open apps at once or gaming.</p><p>Here's how the Pixel 11 Pro XL compares to the Samsung Galaxy S26 Ultra and the iPhone 17 Pro.</p><div ><table><caption>Pixel 11 Pro XL Geekbench Scores compared</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Single-Core Score</strong></p></td><td  ><p><strong>Multi-Core Score</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro XL </strong></p></td><td  ><p>2,112</p></td><td  ><p>5,196</p></td></tr><tr><td class="firstcol " ><p><strong>Apple iPhone 17 Pro Max </strong></p></td><td  ><p>2,995</p></td><td  ><p>8,562</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra </strong></p></td><td  ><p>2,808</p></td><td  ><p>10,212</p></td></tr></tbody></table></div><p>Here's another caveat, though: Geekbench changed to its 7.0 version recently, which updates the hardware that the test uses to compare. Across the board, scores are lower in version 7 compared to the ones in version 6. So there's not a ton of data yet.</p><p>We ran Geekbench 7 just today on the iPhone 17 Pro Max and Galaxy S26 Ultra to get the above scores.</p><p>In single-core, the Pixel 11 Pro XL is weaker by 29% (iPhone) and 39% (Galaxy), but not so much worse that it isn't similar to previous years. </p><p>However, multicore is where things get worrying. The Pixel is 39% slower than the iPhone 17 Pro 17 and 49% slower than the Galaxy S26 Ultra. </p><p>Notably, Pixel phones have tended to be slower than Apple and Samsung for years. However, Google is supposed to be catching up with new <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-vs-11-pro-5-expected-upgrades">Tensor chips built on TSMC</a>'s more advanced 2nm process.</p><p>That process is supposed to bring a performance and efficiency boost. Last year's Tensor G5 was built on the TSMC 3nm process, the same platform used by chips like the <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-5-benchmarks-apples-a19-pro-meets-its-match">Snapdragon 8 Elite Gen 5</a> and Apple's A19 Pro. </p><p>Tom's Guide will be on hand at the Made by Google event tomorrow and once we have the phones in hand, we'll run the Pixel 11 Pro XL through our own battery of tests. Hopefully, this lone test proves to be the outlier and not the standard.</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/after-10-years-of-pixels-why-is-google-still-making-phones">After 10 years of Pixels, why is Google still making phones?</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Made by Google event — how to watch and what to expect</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-and-iphone-18-pro-pre-order-date-just-tipped-heres-when-you-can-get-yours">iPhone Ultra and iPhone 18 Pro pre-order date just tipped — here's when you can get yours</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-xl-benchmarks-leak-and-tensor-g6-is-96-percent-slower-than-galaxy-s26-ultra</link>
                                                                            <description>
                            <![CDATA[ New Geekbench scores reveal a surprisingly weak Pixel 11 Pro XL compared to Apple and Samsung. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">a26aXiLrRgkTAcuyBcqtwL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Ew4zuorgkGJi2y43LdCL54-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 11 Aug 2026 19:39:54 +0000</pubDate>                                                                                                                                <updated>Wed, 12 Aug 2026 12:27:09 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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;br&gt;Send secure tips on Signal: scyo1.55.&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/Ew4zuorgkGJi2y43LdCL54-1280-80.jpg">
                                                            <media:credit><![CDATA[Evan Blass]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 Pro leaked image]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 Pro leaked image]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 Pro leaked image]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Ew4zuorgkGJi2y43LdCL54-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google is launching the new Pixel 11 series at its <a href="https://www.tomsguide.com/phones/google-pixel-phones/how-to-watch-made-by-google-2026">Made by Google event </a>today. Unfortunately, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro XL</a> just popped up on Geekbench, revealing a phone that might not be able to keep up with the competition.</p><p>With the caveat that Geekbench listings can be faked, this doesn't look good. </p><p>We've seen<a href="https://browser.geekbench.com/v7/cpu/112092" target="_blank"> one Geekbench listing</a> for the Pixl 11 Pro XL, which reveals the new Tensor G6 chipset. The tested G6 has 7 cores with 16GB of RAM and appears to be running Android 17 out of the box. </p><p>If you're unfamiliar with Geekbench, the test utilizes several tests to see how a CPU in a phone handles certain tasks. Single-core refers to how one core (or "mini-brain") handles a single task, like, say, photo editing. Multicore refers to how all the cores handle multitasking, such as running several open apps at once or gaming.</p><p>Here's how the Pixel 11 Pro XL compares to the Samsung Galaxy S26 Ultra and the iPhone 17 Pro.</p><div ><table><caption>Pixel 11 Pro XL Geekbench Scores compared</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Single-Core Score</strong></p></td><td  ><p><strong>Multi-Core Score</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro XL </strong></p></td><td  ><p>2,112</p></td><td  ><p>5,196</p></td></tr><tr><td class="firstcol " ><p><strong>Apple iPhone 17 Pro Max </strong></p></td><td  ><p>2,995</p></td><td  ><p>8,562</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra </strong></p></td><td  ><p>2,808</p></td><td  ><p>10,212</p></td></tr></tbody></table></div><p>Here's another caveat, though: Geekbench changed to its 7.0 version recently, which updates the hardware that the test uses to compare. Across the board, scores are lower in version 7 compared to the ones in version 6. So there's not a ton of data yet.</p><p>We ran Geekbench 7 just today on the iPhone 17 Pro Max and Galaxy S26 Ultra to get the above scores.</p><p>In single-core, the Pixel 11 Pro XL is weaker by 29% (iPhone) and 39% (Galaxy), but not so much worse that it isn't similar to previous years. </p><p>However, multicore is where things get worrying. The Pixel is 39% slower than the iPhone 17 Pro 17 and 49% slower than the Galaxy S26 Ultra. </p><p>Notably, Pixel phones have tended to be slower than Apple and Samsung for years. However, Google is supposed to be catching up with new <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-vs-11-pro-5-expected-upgrades">Tensor chips built on TSMC</a>'s more advanced 2nm process.</p><p>That process is supposed to bring a performance and efficiency boost. Last year's Tensor G5 was built on the TSMC 3nm process, the same platform used by chips like the <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-5-benchmarks-apples-a19-pro-meets-its-match">Snapdragon 8 Elite Gen 5</a> and Apple's A19 Pro. </p><p>Tom's Guide will be on hand at the Made by Google event tomorrow and once we have the phones in hand, we'll run the Pixel 11 Pro XL through our own battery of tests. Hopefully, this lone test proves to be the outlier and not the standard.</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/after-10-years-of-pixels-why-is-google-still-making-phones">After 10 years of Pixels, why is Google still making phones?</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Made by Google event — how to watch and what to expect</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-and-iphone-18-pro-pre-order-date-just-tipped-heres-when-you-can-get-yours">iPhone Ultra and iPhone 18 Pro pre-order date just tipped — here's when you can get yours</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ After 10 years of Pixels, why is Google still making phones? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It’s kind of hard to believe that the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend"><u>Google Pixel 11</u></a> series is launching. Yes, it’s been 10 years since the introduction of the first Pixel phone, which was the first truly “made by Google” device. (Yes, there were Nexus phones before that, but that was through partners like HTC.)</p><p>The original Google Pixel had a 5-inch OLED display, 4GB of RAM and an 8MP camera running Android 7.1 Nougat. But it wasn’t about the specs. It was about making a device that was a differentiated flagship that could go toe-to-toe with the <a href="https://www.tomsguide.com/us/iphone-7-iphone-7-plus,review-3908.html"><u>iPhone 7</u></a> and <a href="https://www.tomsguide.com/us/galaxy-s7-s7-edge,review-3403.html"><u>Galaxy S7</u></a>. A true Apple rival that had Google-made hardware and software.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><p>To do that, Google leaned heavily into computational photography before anyone else, elevating image quality via sophisticated processing as opposed to just hardware. And the first Pixel also paved the way for AI as a hallmark feature in phones, with Google Assistant being built directly into the OS.</p><p>But now that we’re a decade in, what does Google have to show for its efforts? A fairly low No. 10 in global market share, according to IDC. And with the Apple-Samsung duopoly still going strong in the U.S. and the likes of Xiaomi, Oppo and Vivo dominating in China, does it still make sense for the Pixel to exist?</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:4139px;"><p class="vanilla-image-block" style="padding-top:107.71%;"><img id="aJ38HUM2EcFZek3QW3peL9" name="TG-Pixel-Timeline_V2" alt="Timeline of the first ten years of Google Pixel" src="https://cdn.mos.cms.futurecdn.net/aJ38HUM2EcFZek3QW3peL9.jpg" mos="" align="middle" fullscreen="" width="4139" height="4458" 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 the Pixel 11, Pixel 11 Pro and <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-starthttps://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less"><u>Pixel 11 Pro Fold</u></a> about to go on sale, I asked three of the smartest mobile analysts why Google is still making phones, and what the company can do to stand out.</p><h2 id="google-is-no-4-in-the-us-so-what-s-the-problem">Google is No. 4 in the US, so what’s the problem?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4204px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="teSCxPBhFLdBsY8ngSQcMG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/teSCxPBhFLdBsY8ngSQcMG.jpg" mos="" align="middle" fullscreen="" width="4204" height="2365" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Pixel 10 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>On the plus side, Google’s phone sales have been growing. In fact, according to IDC’s Nabile Popal, Google’s worldwide share has grown tenfold from 2016 to 2025. And it entered the top 10 globally for the first time in 2023. And by the end of 2025, its global annual shipments had grown 8x since a decade ago.</p><p>It’s even rosier if you look at just the US. Google’s share in the US grew 4x to 4.1% in 2025, from just 1% share in 2020.</p><p>Meanwhile, Google is a fairly solid No. 3 in the UK with 7.5% share and an even higher 11% in Japan, where it’s also No. 3.</p><div ><table><caption>Google Smartphone Shipment Rate and Rank (First Half of 2026)</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>USA</strong></p></td><td  ><p><strong>Japan</strong></p></td><td  ><p><strong>UK</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Brand Rank</strong></p></td><td  ><p>#4</p></td><td  ><p>#3</p></td><td  ><p>#3</p></td></tr><tr><td class="firstcol " ><p><strong>Shipment Share</strong></p></td><td  ><p>4.4%</p></td><td  ><p>11%</p></td><td  ><p>7.5%</p></td></tr></tbody></table></div><div><blockquote><p>"Pixels are meant to showcase Android software capabilities rather than completely dethrone partner hardware ecosystems."</p><p>— Nabile Popal, IDC</p></blockquote></div><p>The problem is that Google simply isn’t as aggressive as other phone makers when it comes to distribution.</p><p>"Google restricts its official hardware sales to roughly 22 countries,” said Popal. “In comparison, industry leaders like Apple and Samsung distribute across well over 120 global territories, mathematically capping Google's volume potential."</p><p>That restricted distribution likely isn’t about a lack of resources. We’re talking about a parent company with a market valuation of approximately $4.3 trillion. It’s much more likely a deliberate choice that’s more political in nature. After all, Google’s Android software powers Samsung, Xiaomi and all of the other biggest brands.</p><p>"Pixels are meant to showcase Android software capabilities rather than completely dethrone partner hardware ecosystems,” Popal said. “They want to showcase their abilities without alienating their top partners."</p><h2 id="why-pixels-phones-still-exist-winning-the-ai-war">Why Pixels phones still exist: Winning the AI war</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3864px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="auUpUy6U6cXc7AVxGRhSUG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/auUpUy6U6cXc7AVxGRhSUG.jpg" mos="" align="middle" fullscreen="" width="3864" height="2174" 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>After <a href="https://blog.google/company-news/inside-google/company-announcements/weve-acquired-motorola-mobility/"><u>Google acquired Motorola Mobility</u></a> in 2011, speculation grew that Google might favor its own hardware division over its partners. And rumors started to swirl for a time that Samsung might pivot from Android to its own Tizen as the OS of choice. </p><p>But while Samsung did show off a prototype Galaxy S4 running Tizen in 2014, it ultimately shelved any plans for ditching Android on phones and pivoted towards using the software on TVs.</p><p>So if that threat has passed, why is there still a need for Pixel phones? The short answer: AI.</p><p>“Google needs its devices division to act as a Gemini-first counterweight to Apple,” said Avi Greengart, founder and lead analyst for Techsponential. “Building your own hardware ensures that your OS remains in sync with component and form factor trends, and allows Google to release features to market on its timetable, not that of its partners.”</p><p>Even before ChatGPT was a household name, Google started to pioneer key AI features that would find their way to other Android phones (and in some cases copied by the iPhone). For example, the Pixel 6 in 2021 introduced Magic Eraser for removing unwanted objects from your phones. This would not have been possible without Google’s own Tensor chip.</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:5967px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="5gUyumkGRvTWmPAntEeVGF" name="shutterstock_2536325833-2" alt="Gemini Live" src="https://cdn.mos.cms.futurecdn.net/5gUyumkGRvTWmPAntEeVGF.jpg" mos="" align="middle" fullscreen="" width="5967" height="3356" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Gemini Live </span><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/reviews/google-pixel-7">Pixel 7</a> gave us <a href="https://www.tomsguide.com/news/google-pixel-7-photo-unblur">Photo Unblur</a> and <a href="https://www.tomsguide.com/news/google-pixel-6-how-tensor-puts-an-end-to-customer-service-call-hell">Direct My Call</a> for navigating byzantine phone menus, and the Pixel 9 gave us Gemini Live for the first time for real-time continuous voice interaction.</p><p>In short, Google needs to demonstrate that it continues to be at the forefront of AI on phones, especially when its partners have other options. For example, the latest Galaxy <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">S26</a> series and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Fold 8</a> series supports both Gemini and Perplexity.</p><p>“I think Google has found the right formula from a hardware perspective and the value of Gemini is definitely strengthening the offering,” said Carolina Milanesi, president and principal analyst for Creative Strategies. “It is also about owning the core piece of the product portfolio that consumers will own going forward.”</p><h2 id="how-the-pixel-11-can-stand-out">How the Pixel 11 can stand out</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7sZnUxtk8wYDiSM87VdfrG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/7sZnUxtk8wYDiSM87VdfrG.jpg" mos="" align="middle" fullscreen="" width="5328" height="2997" 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>With the <a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Made by Google event</a> coming up on August 12th, Google is launching four new Pixel phones: the Pixel 11, Pixel 11 Pro, Pixel 11 Pro XL and Pixel 11 Pro Fold.</p><p>That’s quite a robust lineup for a company that’s still seen as a fairly small player. But Google doesn’t need to beat Apple and Samsung to succeed.</p><p>“Pixel gives Google the opportunity to show its full vision for what an AI-native smartphone experience can be,” Greengart said.</p><p>The Pixel 11 could very well be an AI powerhouse. It’s powered by a 2nm <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how"><u>Tensor G6 chip</u></a> that will speed up Night Sight processing for low-light photos and other on-device AI tasks. And Google is showing off Gemini Proactive Assistance for proactively surfacing useful information, building on the potential of the previous Magic Cue feature.</p><div><blockquote><p>"Pixel gives Google the opportunity to show its full vision for what an AI-native smartphone experience can be."</p><p>— Avi Greengart, Techsponential</p></blockquote></div><p>In addition, the Pixel 11 Pro features a new <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike"><u>HiLight LED</u></a> on the back of the phone that lights up in different color patterns when you’re interacting with Gemini when the phone is face down. It will also serve as an ambient call and notification indicator. But I fear this may come off as gimmicky, similar to the temperature sensor on previous Pixels.</p><h2 id="is-google-pushing-the-envelope-enough">Is Google pushing the envelope enough?</h2><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="n2oiV5KuGBKxk9PobsRqHF" name="Pixel Fold-6.jpg" alt="Google Pixel Fold shown in hand" src="https://cdn.mos.cms.futurecdn.net/n2oiV5KuGBKxk9PobsRqHF.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="caption-text">Pixel Fold </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While it’s clear that the Pixel 11 series will offer meaningful upgrades, the hardware hasn't evolved that much. And if the rumors prove true, Google is going to be missing the boat on a widescreen, passport-style foldable phone like the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win"><u>Galaxy Z Fold 8</u></a> and <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-rumors-everything-you-need-to-know-about-the-foldable-iphone"><u>iPhone Ultra</u></a>. </p><p>Google’s first foldable did indeed have a wide display, but it abandoned that form factor.</p><p>“This is going to be the hardest sell this year because of the attention Samsung has gotten with the Z Fold 8 and Apple will have,” Milanesi said. “That market is still small though and even more so for Google, so as long as they go to that form factor next year they will be ok.”</p><p>Google’s biggest problem is that it seems stuck between trying to trumpet the idealized version of a pure AI-first Android phone and not trying to irk its partners. After 10 years, Pixel has not quite broken through with the masses, but that could very well be a calculated decision.</p><p>“Google has not marketed itself strongly enough to become a household name in phones like Apple or Samsung,” Popal said. “Its industry leading features are only known to niche tech savvy consumers, and if it is to succeed with the Pixel 11 it has to pump up its overall marketing and channel presence.”</p><p>The question is whether Google really wants to.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/after-10-years-of-pixels-why-is-google-still-making-phones</link>
                                                                            <description>
                            <![CDATA[ With the Google Pixel 11 launch imminent, I asked three analysts why Google is still making phones. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">2KDiRFoxAf3TQ9DEAPBa2B</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6qu9WUcSU6xjU7G8Sh2nW4-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 11 Aug 2026 15:12:36 +0000</pubDate>                                                                                                                                <updated>Wed, 19 Aug 2026 13:34:27 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Google Gemini]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[AI]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;&lt;p&gt;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. &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. &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/6qu9WUcSU6xjU7G8Sh2nW4-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide/Bloomberg/Getty]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 4, Pixel 10 and Pixel 3]]></media:description>                                                            <media:text><![CDATA[Google Pixel 4, Pixel 10 and Pixel 3]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 4, Pixel 10 and Pixel 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6qu9WUcSU6xjU7G8Sh2nW4-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It’s kind of hard to believe that the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-checked-out-the-pixel-11-pixel-11-pro-and-pixel-11-pro-xl-heres-the-one-i-recommend"><u>Google Pixel 11</u></a> series is launching. Yes, it’s been 10 years since the introduction of the first Pixel phone, which was the first truly “made by Google” device. (Yes, there were Nexus phones before that, but that was through partners like HTC.)</p><p>The original Google Pixel had a 5-inch OLED display, 4GB of RAM and an 8MP camera running Android 7.1 Nougat. But it wasn’t about the specs. It was about making a device that was a differentiated flagship that could go toe-to-toe with the <a href="https://www.tomsguide.com/us/iphone-7-iphone-7-plus,review-3908.html"><u>iPhone 7</u></a> and <a href="https://www.tomsguide.com/us/galaxy-s7-s7-edge,review-3403.html"><u>Galaxy S7</u></a>. A true Apple rival that had Google-made hardware and software.</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/qEzgvPtMPmA" allowfullscreen></iframe></div></div><p>To do that, Google leaned heavily into computational photography before anyone else, elevating image quality via sophisticated processing as opposed to just hardware. And the first Pixel also paved the way for AI as a hallmark feature in phones, with Google Assistant being built directly into the OS.</p><p>But now that we’re a decade in, what does Google have to show for its efforts? A fairly low No. 10 in global market share, according to IDC. And with the Apple-Samsung duopoly still going strong in the U.S. and the likes of Xiaomi, Oppo and Vivo dominating in China, does it still make sense for the Pixel to exist?</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:4139px;"><p class="vanilla-image-block" style="padding-top:107.71%;"><img id="aJ38HUM2EcFZek3QW3peL9" name="TG-Pixel-Timeline_V2" alt="Timeline of the first ten years of Google Pixel" src="https://cdn.mos.cms.futurecdn.net/aJ38HUM2EcFZek3QW3peL9.jpg" mos="" align="middle" fullscreen="" width="4139" height="4458" 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 the Pixel 11, Pixel 11 Pro and <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-starthttps://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less"><u>Pixel 11 Pro Fold</u></a> about to go on sale, I asked three of the smartest mobile analysts why Google is still making phones, and what the company can do to stand out.</p><h2 id="google-is-no-4-in-the-us-so-what-s-the-problem">Google is No. 4 in the US, so what’s the problem?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4204px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="teSCxPBhFLdBsY8ngSQcMG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/teSCxPBhFLdBsY8ngSQcMG.jpg" mos="" align="middle" fullscreen="" width="4204" height="2365" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Pixel 10 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>On the plus side, Google’s phone sales have been growing. In fact, according to IDC’s Nabile Popal, Google’s worldwide share has grown tenfold from 2016 to 2025. And it entered the top 10 globally for the first time in 2023. And by the end of 2025, its global annual shipments had grown 8x since a decade ago.</p><p>It’s even rosier if you look at just the US. Google’s share in the US grew 4x to 4.1% in 2025, from just 1% share in 2020.</p><p>Meanwhile, Google is a fairly solid No. 3 in the UK with 7.5% share and an even higher 11% in Japan, where it’s also No. 3.</p><div ><table><caption>Google Smartphone Shipment Rate and Rank (First Half of 2026)</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>USA</strong></p></td><td  ><p><strong>Japan</strong></p></td><td  ><p><strong>UK</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Brand Rank</strong></p></td><td  ><p>#4</p></td><td  ><p>#3</p></td><td  ><p>#3</p></td></tr><tr><td class="firstcol " ><p><strong>Shipment Share</strong></p></td><td  ><p>4.4%</p></td><td  ><p>11%</p></td><td  ><p>7.5%</p></td></tr></tbody></table></div><div><blockquote><p>"Pixels are meant to showcase Android software capabilities rather than completely dethrone partner hardware ecosystems."</p><p>— Nabile Popal, IDC</p></blockquote></div><p>The problem is that Google simply isn’t as aggressive as other phone makers when it comes to distribution.</p><p>"Google restricts its official hardware sales to roughly 22 countries,” said Popal. “In comparison, industry leaders like Apple and Samsung distribute across well over 120 global territories, mathematically capping Google's volume potential."</p><p>That restricted distribution likely isn’t about a lack of resources. We’re talking about a parent company with a market valuation of approximately $4.3 trillion. It’s much more likely a deliberate choice that’s more political in nature. After all, Google’s Android software powers Samsung, Xiaomi and all of the other biggest brands.</p><p>"Pixels are meant to showcase Android software capabilities rather than completely dethrone partner hardware ecosystems,” Popal said. “They want to showcase their abilities without alienating their top partners."</p><h2 id="why-pixels-phones-still-exist-winning-the-ai-war">Why Pixels phones still exist: Winning the AI war</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3864px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="auUpUy6U6cXc7AVxGRhSUG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/auUpUy6U6cXc7AVxGRhSUG.jpg" mos="" align="middle" fullscreen="" width="3864" height="2174" 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>After <a href="https://blog.google/company-news/inside-google/company-announcements/weve-acquired-motorola-mobility/"><u>Google acquired Motorola Mobility</u></a> in 2011, speculation grew that Google might favor its own hardware division over its partners. And rumors started to swirl for a time that Samsung might pivot from Android to its own Tizen as the OS of choice. </p><p>But while Samsung did show off a prototype Galaxy S4 running Tizen in 2014, it ultimately shelved any plans for ditching Android on phones and pivoted towards using the software on TVs.</p><p>So if that threat has passed, why is there still a need for Pixel phones? The short answer: AI.</p><p>“Google needs its devices division to act as a Gemini-first counterweight to Apple,” said Avi Greengart, founder and lead analyst for Techsponential. “Building your own hardware ensures that your OS remains in sync with component and form factor trends, and allows Google to release features to market on its timetable, not that of its partners.”</p><p>Even before ChatGPT was a household name, Google started to pioneer key AI features that would find their way to other Android phones (and in some cases copied by the iPhone). For example, the Pixel 6 in 2021 introduced Magic Eraser for removing unwanted objects from your phones. This would not have been possible without Google’s own Tensor chip.</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:5967px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="5gUyumkGRvTWmPAntEeVGF" name="shutterstock_2536325833-2" alt="Gemini Live" src="https://cdn.mos.cms.futurecdn.net/5gUyumkGRvTWmPAntEeVGF.jpg" mos="" align="middle" fullscreen="" width="5967" height="3356" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Gemini Live </span><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/reviews/google-pixel-7">Pixel 7</a> gave us <a href="https://www.tomsguide.com/news/google-pixel-7-photo-unblur">Photo Unblur</a> and <a href="https://www.tomsguide.com/news/google-pixel-6-how-tensor-puts-an-end-to-customer-service-call-hell">Direct My Call</a> for navigating byzantine phone menus, and the Pixel 9 gave us Gemini Live for the first time for real-time continuous voice interaction.</p><p>In short, Google needs to demonstrate that it continues to be at the forefront of AI on phones, especially when its partners have other options. For example, the latest Galaxy <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">S26</a> series and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Fold 8</a> series supports both Gemini and Perplexity.</p><p>“I think Google has found the right formula from a hardware perspective and the value of Gemini is definitely strengthening the offering,” said Carolina Milanesi, president and principal analyst for Creative Strategies. “It is also about owning the core piece of the product portfolio that consumers will own going forward.”</p><h2 id="how-the-pixel-11-can-stand-out">How the Pixel 11 can stand out</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7sZnUxtk8wYDiSM87VdfrG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/7sZnUxtk8wYDiSM87VdfrG.jpg" mos="" align="middle" fullscreen="" width="5328" height="2997" 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>With the <a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Made by Google event</a> coming up on August 12th, Google is launching four new Pixel phones: the Pixel 11, Pixel 11 Pro, Pixel 11 Pro XL and Pixel 11 Pro Fold.</p><p>That’s quite a robust lineup for a company that’s still seen as a fairly small player. But Google doesn’t need to beat Apple and Samsung to succeed.</p><p>“Pixel gives Google the opportunity to show its full vision for what an AI-native smartphone experience can be,” Greengart said.</p><p>The Pixel 11 could very well be an AI powerhouse. It’s powered by a 2nm <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how"><u>Tensor G6 chip</u></a> that will speed up Night Sight processing for low-light photos and other on-device AI tasks. And Google is showing off Gemini Proactive Assistance for proactively surfacing useful information, building on the potential of the previous Magic Cue feature.</p><div><blockquote><p>"Pixel gives Google the opportunity to show its full vision for what an AI-native smartphone experience can be."</p><p>— Avi Greengart, Techsponential</p></blockquote></div><p>In addition, the Pixel 11 Pro features a new <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike"><u>HiLight LED</u></a> on the back of the phone that lights up in different color patterns when you’re interacting with Gemini when the phone is face down. It will also serve as an ambient call and notification indicator. But I fear this may come off as gimmicky, similar to the temperature sensor on previous Pixels.</p><h2 id="is-google-pushing-the-envelope-enough">Is Google pushing the envelope enough?</h2><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="n2oiV5KuGBKxk9PobsRqHF" name="Pixel Fold-6.jpg" alt="Google Pixel Fold shown in hand" src="https://cdn.mos.cms.futurecdn.net/n2oiV5KuGBKxk9PobsRqHF.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="caption-text">Pixel Fold </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While it’s clear that the Pixel 11 series will offer meaningful upgrades, the hardware hasn't evolved that much. And if the rumors prove true, Google is going to be missing the boat on a widescreen, passport-style foldable phone like the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win"><u>Galaxy Z Fold 8</u></a> and <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-rumors-everything-you-need-to-know-about-the-foldable-iphone"><u>iPhone Ultra</u></a>. </p><p>Google’s first foldable did indeed have a wide display, but it abandoned that form factor.</p><p>“This is going to be the hardest sell this year because of the attention Samsung has gotten with the Z Fold 8 and Apple will have,” Milanesi said. “That market is still small though and even more so for Google, so as long as they go to that form factor next year they will be ok.”</p><p>Google’s biggest problem is that it seems stuck between trying to trumpet the idealized version of a pure AI-first Android phone and not trying to irk its partners. After 10 years, Pixel has not quite broken through with the masses, but that could very well be a calculated decision.</p><p>“Google has not marketed itself strongly enough to become a household name in phones like Apple or Samsung,” Popal said. “Its industry leading features are only known to niche tech savvy consumers, and if it is to succeed with the Pixel 11 it has to pump up its overall marketing and channel presence.”</p><p>The question is whether Google really wants to.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to watch Made by Google 2026 — Pixel 11, Pixel Watch 5, Pixel Tag and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Made by Google </a>is happening later this week, and with it comes the reveal of the next generation of Pixel devices. This includes the four-device <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series, the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-5-rumors-everything-we-know-so-far">Pixel Watch 5</a> and maybe even a <a href="https://9to5google.com/2026/07/31/this-is-the-google-pixel-tag/" target="_blank">Pixel tag</a> Bluetooth tracker if the rumors are to be believed.</p><p> Last year's event was a confusing muddle of phone reveals and talk show elements, hosted by Jimmy Fallon. While we'd hoped that this year's event was a little more traditional, it seems that Trevor Noah has been brought in for hosting duties, alongside appearances by multiple celebrities. </p><p>But there's only one way to hear the biggest announcements of the night as they happen, and that's to tune in live. Here's how you can watch Made by Google 2026 and see everything unfold.</p><h2 id="how-to-watch-made-by-google-2026">How to watch Made by Google 2026</h2><p>With this being a Google event, it's no surprise that the entire show is being livestreamed on YouTube by the <a href="https://www.youtube.com/watch?v=c84y9gAY90c" target="_blank"><u>official Made By Google account</u></a>. The event itself begins on August 12 at 6 p.m. ET / 3 p.m. PT / 11 p.m. BST, and will take place in New York.</p><p>You can watch the whole thing on YouTube itself, or watch it via the livestream embedded below.</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/5bNMmYpLkTU" allowfullscreen></iframe></div></div><p>The livestream also features a notification alert, which will ping you when the event is about to begin — which means you won't accidentally forget and miss out on all the reveals.</p><h2 id="what-to-expect-at-made-by-google-2026">What to expect at Made by Google 2026</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The biggest news at Made by Google will be the Pixel 11 series, which includes four separate phones. There's the standard Pixel 11, the more powerful <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a> and its larger sibling Pixel 11 Pro XL, plus the <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">Pixel 11 Pro Fold</a>.</p><p>The rumors and leaks we've seen so far don't suggest any outlandish changes this year, and we should expect the usual slew of upgrades that typically come with a Google phone. Better cameras, improved chips and more exclusive AI software. We can expect base storage to go up to 256GB on all models, though <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">this will likely see the price rise as well.</a></p><p>The biggest upgrade we've heard about is the new Pixel Glow,<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-vs-11-pro-5-expected-upgrades"> or HiLight feature</a>, which adds an RGB LED to the back of your phone that's supposed to act as a notification alert of sorts.</p><p>We're also expecting to see a brand new Pixel Watch 5, which is expected to add extra RAM and storage, even if the design isn't set to change all that much. It's likely that there will be a bunch of extra health features added as well. </p><p>We know a lot less about the Pixel Tag, but design leaks promise an oval-shaped tracker that will connect with Google's Find Hub and help you track down bags, keys and whatever else you may need to keep tabs on.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eJqZrX"></div>                            </div>                            <script src="https://kwizly.com/embed/eJqZrX.js" async></script><h2 id="google-pixel-11-pre-order-deals">Google Pixel 11 pre-order 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Ew4zuorgkGJi2y43LdCL54" name="Pixel 11 Pro leak" alt="Google Pixel 11 Pro leaked image" src="https://cdn.mos.cms.futurecdn.net/Ew4zuorgkGJi2y43LdCL54.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: Evan Blass)</span></figcaption></figure><p>The new Pixels haven't even been announced yet, but Google is already trying to entice you into pre-ordering one. <a href="https://store.google.com/" target="_blank" rel="nofollow">A new landing page</a> on the official Google Store is advertising an exclusive pre-order offer for people who subscribe to email alerts ahead of the Made by Google event.</p><p>The offer is only available for new subscribers, and the small print says that each promotional code will be "valid for the redemption of one discounted Pixel 11 series phone per eligible account." That sounds like Google will be offering money off the cost of purchasing one of the new phones, assuming you sign up and get a valid code first, but it doesn't specify how much you'll be able to save.</p><p>It's also worth noting that this deal will only be available "while supplies last" and redemption will happen on a first-come, first-served basis. The final expiry date will be just before midnight on September 1, after which nobody will be getting a discount.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-which-android-flagship-will-be-the-better-choice">Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra — which Android flagship will win?</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/comparing-galaxy-z-fold-8-vs-oppo-find-n6-crease">Is the Galaxy Z Fold 8's crease really that good? I compared it to the current reigning champ</a></li><li><a href="Google Pixel 11 Pro vs Google Pixel 10 Pro: Biggest upgrades to expect">Google Pixel 11 Pro vs Google Pixel 10 Pro: Biggest upgrades to expect</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/how-to-watch-made-by-google-2026</link>
                                                                            <description>
                            <![CDATA[ The Pixel 11 launch event is coming, and this is how you can watch all the big reveals as they unfold at Made by Google 2026. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">yATXYfH3zLERWbvGQZSmUJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7YjbWB4xL2LGJF27xVkAKC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 11 Aug 2026 09:16:39 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/7YjbWB4xL2LGJF27xVkAKC-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Pixel signage outside made by google event]]></media:description>                                                            <media:text><![CDATA[Pixel signage outside made by google event]]></media:text>
                                <media:title type="plain"><![CDATA[Pixel signage outside made by google event]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7YjbWB4xL2LGJF27xVkAKC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more">Made by Google </a>is happening later this week, and with it comes the reveal of the next generation of Pixel devices. This includes the four-device <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series, the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-5-rumors-everything-we-know-so-far">Pixel Watch 5</a> and maybe even a <a href="https://9to5google.com/2026/07/31/this-is-the-google-pixel-tag/" target="_blank">Pixel tag</a> Bluetooth tracker if the rumors are to be believed.</p><p> Last year's event was a confusing muddle of phone reveals and talk show elements, hosted by Jimmy Fallon. While we'd hoped that this year's event was a little more traditional, it seems that Trevor Noah has been brought in for hosting duties, alongside appearances by multiple celebrities. </p><p>But there's only one way to hear the biggest announcements of the night as they happen, and that's to tune in live. Here's how you can watch Made by Google 2026 and see everything unfold.</p><h2 id="how-to-watch-made-by-google-2026">How to watch Made by Google 2026</h2><p>With this being a Google event, it's no surprise that the entire show is being livestreamed on YouTube by the <a href="https://www.youtube.com/watch?v=c84y9gAY90c" target="_blank"><u>official Made By Google account</u></a>. The event itself begins on August 12 at 6 p.m. ET / 3 p.m. PT / 11 p.m. BST, and will take place in New York.</p><p>You can watch the whole thing on YouTube itself, or watch it via the livestream embedded below.</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/5bNMmYpLkTU" allowfullscreen></iframe></div></div><p>The livestream also features a notification alert, which will ping you when the event is about to begin — which means you won't accidentally forget and miss out on all the reveals.</p><h2 id="what-to-expect-at-made-by-google-2026">What to expect at Made by Google 2026</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The biggest news at Made by Google will be the Pixel 11 series, which includes four separate phones. There's the standard Pixel 11, the more powerful <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a> and its larger sibling Pixel 11 Pro XL, plus the <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">Pixel 11 Pro Fold</a>.</p><p>The rumors and leaks we've seen so far don't suggest any outlandish changes this year, and we should expect the usual slew of upgrades that typically come with a Google phone. Better cameras, improved chips and more exclusive AI software. We can expect base storage to go up to 256GB on all models, though <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">this will likely see the price rise as well.</a></p><p>The biggest upgrade we've heard about is the new Pixel Glow,<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-vs-11-pro-5-expected-upgrades"> or HiLight feature</a>, which adds an RGB LED to the back of your phone that's supposed to act as a notification alert of sorts.</p><p>We're also expecting to see a brand new Pixel Watch 5, which is expected to add extra RAM and storage, even if the design isn't set to change all that much. It's likely that there will be a bunch of extra health features added as well. </p><p>We know a lot less about the Pixel Tag, but design leaks promise an oval-shaped tracker that will connect with Google's Find Hub and help you track down bags, keys and whatever else you may need to keep tabs on.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eJqZrX"></div>                            </div>                            <script src="https://kwizly.com/embed/eJqZrX.js" async></script><h2 id="google-pixel-11-pre-order-deals">Google Pixel 11 pre-order 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Ew4zuorgkGJi2y43LdCL54" name="Pixel 11 Pro leak" alt="Google Pixel 11 Pro leaked image" src="https://cdn.mos.cms.futurecdn.net/Ew4zuorgkGJi2y43LdCL54.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: Evan Blass)</span></figcaption></figure><p>The new Pixels haven't even been announced yet, but Google is already trying to entice you into pre-ordering one. <a href="https://store.google.com/" target="_blank" rel="nofollow">A new landing page</a> on the official Google Store is advertising an exclusive pre-order offer for people who subscribe to email alerts ahead of the Made by Google event.</p><p>The offer is only available for new subscribers, and the small print says that each promotional code will be "valid for the redemption of one discounted Pixel 11 series phone per eligible account." That sounds like Google will be offering money off the cost of purchasing one of the new phones, assuming you sign up and get a valid code first, but it doesn't specify how much you'll be able to save.</p><p>It's also worth noting that this deal will only be available "while supplies last" and redemption will happen on a first-come, first-served basis. The final expiry date will be just before midnight on September 1, after which nobody will be getting a discount.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-which-android-flagship-will-be-the-better-choice">Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra — which Android flagship will win?</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/comparing-galaxy-z-fold-8-vs-oppo-find-n6-crease">Is the Galaxy Z Fold 8's crease really that good? I compared it to the current reigning champ</a></li><li><a href="Google Pixel 11 Pro vs Google Pixel 10 Pro: Biggest upgrades to expect">Google Pixel 11 Pro vs Google Pixel 10 Pro: Biggest upgrades to expect</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 Pro vs Google Pixel 10 Pro: Biggest upgrades to expect ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google's Pixel phones may not be the fastest Android smartphones on the market, but they have an identity that few other brands can match. Between Google's clean design language, the Pixel-exclusive software features, and day-one Android updates, Pixel phones continue to attract a loyal following.</p><p>It's now been almost a year since the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series launched, which means it's nearly time for the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> to be released. Google has already confirmed that the new phones will debut at its <a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more#section-other-possible-appearances">Made by Google event on August 12</a>, so if you're currently using a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro</a>, it's probably time to start wondering whether this year's upgrade is worth it. </p><p>We won't know exactly how the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a> vs. Pixel 10 Pro comparison will look like until Google officially announces the new model. But, as is usually the case with Pixel launches, enough leaks and rumors have already surfaced to paint a fairly clear picture of what's coming and whether upgrading this year makes sense.</p><h3 class="article-body__section" id="section-pixel-11-pro-vs-pixel-10-pro-rumored-specs"><span>Pixel 11 Pro vs Pixel 10 Pro: Rumored Specs</span></h3><div ><table><thead><tr><th class="firstcol " ><p>Category</p></th><th  ><p>Google Pixel 11 Pro (rumored)</p></th><th  ><p>Google Pixel 10 Pro</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Display</p></td><td  ><p>6.3-inch Super Actua OLED, 120Hz</p></td><td  ><p>6.3-inch Super Actua OLED, 120Hz</p></td></tr><tr><td class="firstcol " ><p>OS</p></td><td  ><p>Android 17</p></td><td  ><p>Android 16 (upgradable to Android 17)</p></td></tr><tr><td class="firstcol " ><p>Processor</p></td><td  ><p>Tensor G6 (2nm)</p></td><td  ><p>Tensor G5 (3nm)</p></td></tr><tr><td class="firstcol " ><p>RAM</p></td><td  ><p>12GB / 16GB</p></td><td  ><p>16GB</p></td></tr><tr><td class="firstcol " ><p>Storage</p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>128GB / 256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p>Rear Cameras</p></td><td  ><p>50MP main, 48MP ultrawide, 48MP telephoto</p></td><td  ><p>50MP main, 48MP ultrawide, 48MP telephoto</p></td></tr><tr><td class="firstcol " ><p>Front Camera</p></td><td  ><p>42MP</p></td><td  ><p>42MP</p></td></tr><tr><td class="firstcol " ><p>Ingress Protection</p></td><td  ><p>IP68</p></td><td  ><p>IP68</p></td></tr><tr><td class="firstcol " ><p>Battery</p></td><td  ><p>4,850mAh</p></td><td  ><p>4,870mAh</p></td></tr><tr><td class="firstcol " ><p>Charging</p></td><td  ><p>45W wired, 25W wireless Qi2</p></td><td  ><p>30W wired, 25W wireless Qi2</p></td></tr><tr><td class="firstcol " ><p>Colors</p></td><td  ><p>Light Fog, Midnight Haze, Dune, Pine</p></td><td  ><p>Moonstone, Jade, Porcelain, Obsidian</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-tensor-g6-should-bring-a-performance-boost"><span>Tensor G6 should bring a performance boost</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2025px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="Fudiia9dAiNt5cGSDLMqKm" name="tensor2.jpg" alt="Google Pixel Event Tensor chip screenshot" src="https://cdn.mos.cms.futurecdn.net/Fudiia9dAiNt5cGSDLMqKm.jpg" mos="" align="middle" fullscreen="" width="2025" height="1137" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google made one of the biggest changes to the Pixel lineup last year with the Tensor G5. On paper, it didn't look dramatically different from the Tensor G4, but behind the scenes, Google made a major shift by moving chip production from Samsung Foundry to TSMC. </p><p>The Tensor G5 was built on TSMC's 3nm (N3P) process, the same manufacturing technology used by chips like the <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-5-benchmarks-apples-a19-pro-meets-its-match">Snapdragon 8 Elite Gen 5</a> and Apple's A19 Pro. In theory, that should have translated into much better efficiency and thermals. While there were subtle improvements, the performance gains weren't quite as dramatic as many had expected. </p><p>This year, Google is expected to take another big leap. According to recent leaks, the Pixel 11 Pro will be powered by the Tensor G6, which is <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-could-finally-catch-up-to-samsung-and-apple-on-performance-heres-how">reportedly built on TSMC's more advanced 2nm process</a>. If true, it should bring another meaningful performance jump, while also helping address one of the biggest complaints surrounding recent Pixel phones: heat management. </p><p>In terms of configuration, the Tensor G6 is rumored to move to a new seven-core CPU with a 1+4+2 architecture, featuring one ARM C1-Ultra core clocked at 4.11GHz, four ARM C1-Pro cores at 3.38GHz, and two C1-Pro cores at 2.65GHz. </p><p>Major GPU upgrades aren't expected this year, but the new CPU and upgraded NPU should still deliver a noticeable boost in overall performance compared to the Tensor G5 on Pixel 10 Pro.</p><h3 class="article-body__section" id="section-mediatek-modem-could-finally-fix-connectivity"><span>MediaTek modem could finally fix connectivity</span></h3><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="C7gz77MxGy32jtDGNLZjr" name="Google Pixel 10 Pro XL hands-on" alt="Google Pixel 10 Pro XL hands-on." src="https://cdn.mos.cms.futurecdn.net/C7gz77MxGy32jtDGNLZjr.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>Alongside the Tensor G6, Google is also expected to make another major hardware change by finally <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">replacing Samsung's modem with a MediaTek modem.</a></p><p>According to recent leaks, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a> will use MediaTek's M90 modem, which should help address the cellular connectivity and signal issues that have plagued Pixel phones for the past few generations. </p><p>The MediaTek M90 is rated for download speeds of up to 12Gbps and also promises up to an 18% improvement in power efficiency thanks to AI-powered optimizations. </p><p>Since the cellular modem is one of the biggest battery drains on any smartphone, a more efficient modem could noticeably improve battery life, especially as the Pixel 11 series is <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">rumored to feature a slightly smaller battery this year</a>.</p><h3 class="article-body__section" id="section-256gb-will-become-the-new-base-storage-option"><span>256GB will become the new base storage option</span></h3><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="PGSxoavmxetgJVhWQJcjD5" name="Google Pixel 10 hands-on" alt="Google Pixel 10 hands-on." src="https://cdn.mos.cms.futurecdn.net/PGSxoavmxetgJVhWQJcjD5.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>Another upgrade (or rather a forced upgrade) is expected to come to the Pixel 11 Pro's base storage. According to recent leaks, Google is dropping the 128GB model entirely. Instead, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">Pixel 11 Pro is expected to start with 256GB of storage</a>, giving buyers more space out of the box.</p><p>That's certainly good news if you've been running out of storage on previous Pixel phones. The catch, though, is that Google is reportedly reducing the RAM on the base model. While the Pixel 10 Pro came with 16GB of RAM across the lineup, the entry-level Pixel 11 Pro is expected to pair its 256GB of storage with just 12GB of RAM. </p><p>Pricing is also expected to increase. The Pixel 11 Pro is rumored to <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">start at $1,099</a>. That said, if you compare it to the 256GB Pixel 10 Pro, the price is expected to be roughly the same. The trade-off is that you'll be getting more storage by default, but less RAM than before.</p><h3 class="article-body__section" id="section-a-new-kind-of-notification-led-could-be-coming"><span>A new kind of notification LED could be coming</span></h3><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="Ew4zuorgkGJi2y43LdCL54" name="Pixel 11 Pro leak" alt="Google Pixel 11 Pro leaked image" src="https://cdn.mos.cms.futurecdn.net/Ew4zuorgkGJi2y43LdCL54.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: Evan Blass)</span></figcaption></figure><p>It wouldn't be a Pixel launch without Google introducing a fun little hardware feature, and this year, that appears to be a new glowing LED on the back of the phone. </p><p>Google has been gradually adopting this glowing light design across its products. We've already seen it on the new <a href="https://www.tomsguide.com/audio/smart-speakers/google-home-speaker-review">Google Home Speaker</a> and during the <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">brief Googlebook showcase</a> earlier this year, and according to recent leaks, it's now making its way to the Pixel 11 Pro as well. </p><p>The new light, reportedly <a href="https://bsky.app/profile/rquandt.bsky.social/post/3ms7jpb45v22w" target="_blank">called HiLight</a>, is expected to replace the thermometer sensor on the back of the phone. Google has even <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-images-just-leaked-ahead-of-launch-see-it-from-every-angle-including-a-weird-led">teased the circular LED</a> in a few promotional materials already. </p><p>According to leaks, it will light up when you're talking to Gemini, and users will also be able to assign different lighting effects to specific contacts and notifications.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ODqRrX"></div>                            </div>                            <script src="https://kwizly.com/embed/ODqRrX.js" async></script><h3 class="article-body__section" id="section-120x-zoom"><span>120x zoom </span></h3><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="yPtn8Mx2qPRE4iNYe5BWF6" name="Google Pixel 10 hands-on" alt="Google Pixel 10 hands-on." src="https://cdn.mos.cms.futurecdn.net/yPtn8Mx2qPRE4iNYe5BWF6.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>One camera upgrade expected on the Pixel 11 Pro is improved zoom. Google introduced <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-captured-these-100x-pro-res-zoom-photos-with-the-pixel-10-pro-xl-and-the-results-blew-me-away">Pro Res Zoom with the Pixel 10 Pro</a>, allowing users to zoom in up to 100x using a combination of its telephoto camera and AI. This year, the company is reportedly taking things a step further with support for up to 120x zoom. </p><p>The leak comes from Evan Blass, who <a href="https://evleaks.substack.com/p/p11p" target="_blank">shared</a> what appears to be official Pixel 11 Pro marketing material ahead of next week's Made by Google event. That makes this particular leak seem fairly credible.</p><p>That said, I don't think this will be the only camera upgrade Google announces. The company usually spends a good chunk of its launch event talking about new camera features, so I'd be surprised if 120x zoom ends up being the headline change. </p><p>There's likely a lot more coming to the Pixel 11 Pro's camera system than what we've seen in the leaks so far.</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/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">Pixel 11 battery capacity just leaked and it has me worried about Google's next flagship</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-using-the-pixel-10-pro-for-2-months-and-i-regret-the-upgrade">I've been using the Pixel 10 Pro for 2 months — and I regret the upgrade</a></li><li><a href="https://www.tomsguide.com/phones/how-i-use-google-maps-to-time-travel-avoid-bad-air-and-survive-zero-service">How I use Google Maps to time travel, avoid bad air, and survive zero service</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-vs-11-pro-5-expected-upgrades</link>
                                                                            <description>
                            <![CDATA[ The Pixel 11 Pro is on the way, and these five upgrades over Pixel 10 Pro could make it worth the wait ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">BD6PFqNAJ7HnmBdU4Sbg5W</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/BktoXan9vxAVCBVHwmqXe-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 09 Aug 2026 05:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Sanuj Bhatia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/8p5BvMVA7cnu5AWkxnTjRC.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/BktoXan9vxAVCBVHwmqXe-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 10 Pro XL hands-on.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 10 Pro XL hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 10 Pro XL hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/BktoXan9vxAVCBVHwmqXe-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google's Pixel phones may not be the fastest Android smartphones on the market, but they have an identity that few other brands can match. Between Google's clean design language, the Pixel-exclusive software features, and day-one Android updates, Pixel phones continue to attract a loyal following.</p><p>It's now been almost a year since the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series launched, which means it's nearly time for the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> to be released. Google has already confirmed that the new phones will debut at its <a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more#section-other-possible-appearances">Made by Google event on August 12</a>, so if you're currently using a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro</a>, it's probably time to start wondering whether this year's upgrade is worth it. </p><p>We won't know exactly how the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a> vs. Pixel 10 Pro comparison will look like until Google officially announces the new model. But, as is usually the case with Pixel launches, enough leaks and rumors have already surfaced to paint a fairly clear picture of what's coming and whether upgrading this year makes sense.</p><h3 class="article-body__section" id="section-pixel-11-pro-vs-pixel-10-pro-rumored-specs"><span>Pixel 11 Pro vs Pixel 10 Pro: Rumored Specs</span></h3><div ><table><thead><tr><th class="firstcol " ><p>Category</p></th><th  ><p>Google Pixel 11 Pro (rumored)</p></th><th  ><p>Google Pixel 10 Pro</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Display</p></td><td  ><p>6.3-inch Super Actua OLED, 120Hz</p></td><td  ><p>6.3-inch Super Actua OLED, 120Hz</p></td></tr><tr><td class="firstcol " ><p>OS</p></td><td  ><p>Android 17</p></td><td  ><p>Android 16 (upgradable to Android 17)</p></td></tr><tr><td class="firstcol " ><p>Processor</p></td><td  ><p>Tensor G6 (2nm)</p></td><td  ><p>Tensor G5 (3nm)</p></td></tr><tr><td class="firstcol " ><p>RAM</p></td><td  ><p>12GB / 16GB</p></td><td  ><p>16GB</p></td></tr><tr><td class="firstcol " ><p>Storage</p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>128GB / 256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p>Rear Cameras</p></td><td  ><p>50MP main, 48MP ultrawide, 48MP telephoto</p></td><td  ><p>50MP main, 48MP ultrawide, 48MP telephoto</p></td></tr><tr><td class="firstcol " ><p>Front Camera</p></td><td  ><p>42MP</p></td><td  ><p>42MP</p></td></tr><tr><td class="firstcol " ><p>Ingress Protection</p></td><td  ><p>IP68</p></td><td  ><p>IP68</p></td></tr><tr><td class="firstcol " ><p>Battery</p></td><td  ><p>4,850mAh</p></td><td  ><p>4,870mAh</p></td></tr><tr><td class="firstcol " ><p>Charging</p></td><td  ><p>45W wired, 25W wireless Qi2</p></td><td  ><p>30W wired, 25W wireless Qi2</p></td></tr><tr><td class="firstcol " ><p>Colors</p></td><td  ><p>Light Fog, Midnight Haze, Dune, Pine</p></td><td  ><p>Moonstone, Jade, Porcelain, Obsidian</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-tensor-g6-should-bring-a-performance-boost"><span>Tensor G6 should bring a performance boost</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2025px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="Fudiia9dAiNt5cGSDLMqKm" name="tensor2.jpg" alt="Google Pixel Event Tensor chip screenshot" src="https://cdn.mos.cms.futurecdn.net/Fudiia9dAiNt5cGSDLMqKm.jpg" mos="" align="middle" fullscreen="" width="2025" height="1137" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google made one of the biggest changes to the Pixel lineup last year with the Tensor G5. On paper, it didn't look dramatically different from the Tensor G4, but behind the scenes, Google made a major shift by moving chip production from Samsung Foundry to TSMC. </p><p>The Tensor G5 was built on TSMC's 3nm (N3P) process, the same manufacturing technology used by chips like the <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-5-benchmarks-apples-a19-pro-meets-its-match">Snapdragon 8 Elite Gen 5</a> and Apple's A19 Pro. In theory, that should have translated into much better efficiency and thermals. While there were subtle improvements, the performance gains weren't quite as dramatic as many had expected. </p><p>This year, Google is expected to take another big leap. According to recent leaks, the Pixel 11 Pro will be powered by the Tensor G6, which is <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-could-finally-catch-up-to-samsung-and-apple-on-performance-heres-how">reportedly built on TSMC's more advanced 2nm process</a>. If true, it should bring another meaningful performance jump, while also helping address one of the biggest complaints surrounding recent Pixel phones: heat management. </p><p>In terms of configuration, the Tensor G6 is rumored to move to a new seven-core CPU with a 1+4+2 architecture, featuring one ARM C1-Ultra core clocked at 4.11GHz, four ARM C1-Pro cores at 3.38GHz, and two C1-Pro cores at 2.65GHz. </p><p>Major GPU upgrades aren't expected this year, but the new CPU and upgraded NPU should still deliver a noticeable boost in overall performance compared to the Tensor G5 on Pixel 10 Pro.</p><h3 class="article-body__section" id="section-mediatek-modem-could-finally-fix-connectivity"><span>MediaTek modem could finally fix connectivity</span></h3><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="C7gz77MxGy32jtDGNLZjr" name="Google Pixel 10 Pro XL hands-on" alt="Google Pixel 10 Pro XL hands-on." src="https://cdn.mos.cms.futurecdn.net/C7gz77MxGy32jtDGNLZjr.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>Alongside the Tensor G6, Google is also expected to make another major hardware change by finally <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">replacing Samsung's modem with a MediaTek modem.</a></p><p>According to recent leaks, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a> will use MediaTek's M90 modem, which should help address the cellular connectivity and signal issues that have plagued Pixel phones for the past few generations. </p><p>The MediaTek M90 is rated for download speeds of up to 12Gbps and also promises up to an 18% improvement in power efficiency thanks to AI-powered optimizations. </p><p>Since the cellular modem is one of the biggest battery drains on any smartphone, a more efficient modem could noticeably improve battery life, especially as the Pixel 11 series is <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">rumored to feature a slightly smaller battery this year</a>.</p><h3 class="article-body__section" id="section-256gb-will-become-the-new-base-storage-option"><span>256GB will become the new base storage option</span></h3><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="PGSxoavmxetgJVhWQJcjD5" name="Google Pixel 10 hands-on" alt="Google Pixel 10 hands-on." src="https://cdn.mos.cms.futurecdn.net/PGSxoavmxetgJVhWQJcjD5.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>Another upgrade (or rather a forced upgrade) is expected to come to the Pixel 11 Pro's base storage. According to recent leaks, Google is dropping the 128GB model entirely. Instead, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">Pixel 11 Pro is expected to start with 256GB of storage</a>, giving buyers more space out of the box.</p><p>That's certainly good news if you've been running out of storage on previous Pixel phones. The catch, though, is that Google is reportedly reducing the RAM on the base model. While the Pixel 10 Pro came with 16GB of RAM across the lineup, the entry-level Pixel 11 Pro is expected to pair its 256GB of storage with just 12GB of RAM. </p><p>Pricing is also expected to increase. The Pixel 11 Pro is rumored to <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">start at $1,099</a>. That said, if you compare it to the 256GB Pixel 10 Pro, the price is expected to be roughly the same. The trade-off is that you'll be getting more storage by default, but less RAM than before.</p><h3 class="article-body__section" id="section-a-new-kind-of-notification-led-could-be-coming"><span>A new kind of notification LED could be coming</span></h3><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="Ew4zuorgkGJi2y43LdCL54" name="Pixel 11 Pro leak" alt="Google Pixel 11 Pro leaked image" src="https://cdn.mos.cms.futurecdn.net/Ew4zuorgkGJi2y43LdCL54.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: Evan Blass)</span></figcaption></figure><p>It wouldn't be a Pixel launch without Google introducing a fun little hardware feature, and this year, that appears to be a new glowing LED on the back of the phone. </p><p>Google has been gradually adopting this glowing light design across its products. We've already seen it on the new <a href="https://www.tomsguide.com/audio/smart-speakers/google-home-speaker-review">Google Home Speaker</a> and during the <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">brief Googlebook showcase</a> earlier this year, and according to recent leaks, it's now making its way to the Pixel 11 Pro as well. </p><p>The new light, reportedly <a href="https://bsky.app/profile/rquandt.bsky.social/post/3ms7jpb45v22w" target="_blank">called HiLight</a>, is expected to replace the thermometer sensor on the back of the phone. Google has even <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-images-just-leaked-ahead-of-launch-see-it-from-every-angle-including-a-weird-led">teased the circular LED</a> in a few promotional materials already. </p><p>According to leaks, it will light up when you're talking to Gemini, and users will also be able to assign different lighting effects to specific contacts and notifications.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ODqRrX"></div>                            </div>                            <script src="https://kwizly.com/embed/ODqRrX.js" async></script><h3 class="article-body__section" id="section-120x-zoom"><span>120x zoom </span></h3><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="yPtn8Mx2qPRE4iNYe5BWF6" name="Google Pixel 10 hands-on" alt="Google Pixel 10 hands-on." src="https://cdn.mos.cms.futurecdn.net/yPtn8Mx2qPRE4iNYe5BWF6.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>One camera upgrade expected on the Pixel 11 Pro is improved zoom. Google introduced <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-captured-these-100x-pro-res-zoom-photos-with-the-pixel-10-pro-xl-and-the-results-blew-me-away">Pro Res Zoom with the Pixel 10 Pro</a>, allowing users to zoom in up to 100x using a combination of its telephoto camera and AI. This year, the company is reportedly taking things a step further with support for up to 120x zoom. </p><p>The leak comes from Evan Blass, who <a href="https://evleaks.substack.com/p/p11p" target="_blank">shared</a> what appears to be official Pixel 11 Pro marketing material ahead of next week's Made by Google event. That makes this particular leak seem fairly credible.</p><p>That said, I don't think this will be the only camera upgrade Google announces. The company usually spends a good chunk of its launch event talking about new camera features, so I'd be surprised if 120x zoom ends up being the headline change. </p><p>There's likely a lot more coming to the Pixel 11 Pro's camera system than what we've seen in the leaks so far.</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/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">Pixel 11 battery capacity just leaked and it has me worried about Google's next flagship</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-using-the-pixel-10-pro-for-2-months-and-i-regret-the-upgrade">I've been using the Pixel 10 Pro for 2 months — and I regret the upgrade</a></li><li><a href="https://www.tomsguide.com/phones/how-i-use-google-maps-to-time-travel-avoid-bad-air-and-survive-zero-service">How I use Google Maps to time travel, avoid bad air, and survive zero service</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra — which Android flagship will win? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Google Pixel 11 Pro XL</a> is set to launch at the August 12 Made by Google event, alongside the rest of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series. If past releases are anything to go by, this should be the flagship Google phone for the year, with the largest display, best battery life and all the other things that make premium phones worth having. </p><p>But the question still remains, how will it compare to other flagships like the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Samsung Galaxy S26 Ultra</a>? Pixel phones typically lag behind their rivals in the hardware department, and while they do make up some of the distance with robust AI and software features, it still feels like something is missing. A new phone is a new opportunity to one-up the competition, but will the Pixel 11 Pro XL actually catch up to the Galaxy S26 Ultra?</p><p>Here's our rundown of Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra, based on all the rumors and leaks we've heard so far.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-specs"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11 Pro XL (rumored)</strong></p></td><td  ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $1,299</p></td><td  ><p>From $1,299</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.8-inch OLED</p></td><td  ><p>6.9-inch AMOLD</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB / 16GB</p></td><td  ><p>12GB / 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>42MP</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Camera</strong></p></td><td  ><p>50MP main, 48MP ultrawide, 48MP telephoto (5x zoom)</p></td><td  ><p>200MP main, 50MP ultrawide, 50MP telelphoto (5x zoom), 10MP telelphoto (3MP)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>5,115 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired, 25W wireless</p></td><td  ><p>45W wired, 25W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Operating System</strong></p></td><td  ><p>Android 16</p></td><td  ><p>One UI 8.5</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.4 x 3.01 x 0.33 inches</p></td><td  ><p>6.44 x 3.07 x 0.31 inches</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-price-availability"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Price & availability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="8897kp7dMTMmu9uULdRdmC" name="image (2)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/8897kp7dMTMmu9uULdRdmC.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>The Samsung Galaxy S26 Ultra is available right now, with a starting price of $1,299 for a model with 256GB of storage and 12GB of RAM. However, given the phone is a few months old, we have started seeing some significant discounts from various retailers — including Samsung itself.</p><p>The Google Pixel 11 Pro XL is expected to cost $100 more than last year's model, meaning the phone may start at $1,299. The cheapest model will reportedly come with 256GB of storage once again, but it may feature a memory downgrade with just 12GB of RAM — compared to 16GB in the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL</a>.</p><p>In other words, it looks like both phones will cost the same amount for similar core specs. </p><p>The Pixel 11 Pro XL release date isn't known right now, but new Google typically opens pre-orders for new Pixel devices at the end of the launch event, with the release day scheduled one to two weeks later. So expect to have your hands on a Pixel 11 Pro XL before the end of the month.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-design-display"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Design & display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nmC8mEhVxiXZQUnUDWbEKm" name="Samsung-Galaxy-S26-Ultra-home-screen" alt="Front view of Samsung Galaxy S26 Ultra held up against a brick wall" src="https://cdn.mos.cms.futurecdn.net/nmC8mEhVxiXZQUnUDWbEKm.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 Samsung Galaxy S26 Ultra is the larger of the two phones, rocking a 6.9-inch screen, measuring 6.44 x 3.07 x 0.31 in and weighing 7.55 oz. Meanwhile the Pixel 11 Pro XL is expected to come with a 6.8-inch display, measure 6.4 x 30.1 x 0.33 inches and weigh 7.9 ounces. That means, despite being slightly smaller, it is a heavier device — though part of that will come from the <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 magnets</a> in the back of the 11 Pro XL.</p><p>The 11 Pro XL's screen is tipped to be brighter, with<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades"> leaks promising a 3,600 nit display</a>, compared to the 2,600 nit S26 Ultra. This should prove beneficial for the 11 Pro XL in bright situations, though it's unclear if it will have an anti-reflective coating the same way Samsung offers. Likewise, it's unlikely we'll see the <a href="https://www.tomsguide.com/phones/samsung-phones/the-galaxy-s26-ultras-privacy-display-is-more-exciting-to-me-than-any-ai-feature">Privacy Display</a> features from Google anytime soon.</p><p>Both phones should offer rounded corners, though Google has the horizontal triple-lens camera bar while Samsung has stuck with the vertical quad-lens system for another generation. However Samsung's phone lacks the "<a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">Pixel Glow</a>" feature that's rumored to be coming to all Pixel 11 phones, and is expected to serve as a notification light on the back of the device.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-performance"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="MMVKYt4EStWuesGovSJ8oC" name="image (3)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/MMVKYt4EStWuesGovSJ8oC.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>Performance is not the area Google usually excels at, especially since it moved to Tensor chips. Considering this, and how high the performance benchmarks are for Galaxy S26 Ultra's <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Snapdragon 8 Elite Gen 5 for Galaxy</a>, we should not expect to see the Pixel 11 Pro XL topping any benchmark leagues following its release.</p><p>That's especially true when you remember some of the rumored changes coming to this year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-tensor-g5-and-g6-chips-forecasted-to-lag-behind-apple-and-qualcomm">Tensor G6 chip</a>. The G6 is rumored to drop to seven cores, instead of the usual eight, though it will be built on TSMC's 2nm process — which improves transistor density, and in the process boosts performance and power efficiency. To make matters worse, Google is utilizing a <a href="https://www.tomsguide.com/ai/google-to-remove-samsung-from-its-tensor-g6-modem-heres-why-that-matters">MediaTek M90 modem,</a> which is several years old at this point.</p><p>There's more to performance than benchmarks and the latest hardware, but considering Google's track record with weak performance, you'd have thought it would make more of an effort.</p><p>The 11 Pro XL is also expected to come with a new <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Titan M3 security chip</a>, which will supposedly feature a new "Tensor Processing Unit" and offer forwards-compatible protection against whatever future cyberattacks bad actors might develop — though how that compares to the latest version of Samsung's Knox isn't clear.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-cameras"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2715px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vbGrCLaZGfUvCojyg8YYUd" name="Galaxy S26 Ultra 24 hours-12" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/vbGrCLaZGfUvCojyg8YYUd.jpg" mos="" align="middle" fullscreen="" width="2715" height="1527" 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>On paper the Galaxy S26 Ultra has the advantage in the camera department. The phone is equipped with a 200MP main camera lens, partnered with a 50MP ultrawide lens, 50MP telephoto lens with 5x optical zoom and a 10MP secondary telephoto capable of 3x optical zoom — plus a 12MP selfie camera on the front.</p><p>In contrast, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">Pixel 11 Pro XL is expected to come with a 50MP main camera</a>, 48MP ultrawide and a 48MP telephoto lens with 5x optical zoom (and up to <a href="https://www.androidheadlines.com/2026/08/new-leaks-confirm-the-pixel-11-pros-120x-zoom-feature.html" target="_blank">120x AI assisted digital zoom</a>). There's no word on what sort of resolution to expect from the selfie camera, but you shouldn't expect anything less than the 42MP lens from the Pixel 10 Pro XL.</p><p>Obviously we won't know how much better or worse the Pixel 11 Pro XL's cameras are compared to S26 Ultra until we actually get our hands on the phone. Camera hardware only tells you so much, especially with how important software has become to the photography process. So we'll have to do some thorough hands-on testing </p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-software-ai"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Software & AI</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1154px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="XT3UDi3a4UHzdbWs5SN5P3" name="Pixel 11 render" alt="Pixel 11 render" src="https://cdn.mos.cms.futurecdn.net/XT3UDi3a4UHzdbWs5SN5P3.jpg" mos="" align="middle" fullscreen="" width="1154" height="649" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks / Android Headlines)</span></figcaption></figure><p>Software is easily the area where Pixel phones excel, especially since the 11 Pro XL will be several months newer than the Galaxy S26 Ultra. The phone will have the usual array of software benefits, including first-in-line access to the latest Android updates, quarterly Pixel drops with new features, and the latest and best AI Google has to offer.</p><p>Samsung usually isn't that far behind, though. While One UI has had some hiccups in rolling out to everyone, Samsung tends to be pretty good at getting new updates to users fairly quickly. Just not as quickly as Google does with Pixel.</p><p>Likewise Samsung has invested a lot in AI, and there's been a lot of crossover between Pixel and Galaxy phones when it comes to the latest features. So we won't know for sure who has the best AI suite until Google actually reveals what the Pixel 11 series has to offer.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-battery-charging"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Battery & charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3755px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iGGyvv7a4hQPrn26YbFnid" name="Galaxy S26 Ultra 24 hours-11" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/iGGyvv7a4hQPrn26YbFnid.jpg" mos="" align="middle" fullscreen="" width="3755" height="2112" 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>Battery life is another thing Pixels flag on compared to Samsung, but we won't know how much has changed until we actually test the 11 Pro XL's battery life for ourselves. However, the phone has a slightly smaller 5,115 mAh battery compared to the Pixel 10 Pro XL, which doesn't fill us with a lot of confidence.</p><p>The 10 Pro XL lasted 14 hours and 35 minutes in our custom battery test, compared to the 16 hours and 10 minutes recorded by the S26 Ultra. If the Pixel 10 Pro XL can't beat the S26 Ultra's 5,000 mAh battery life, then a smaller Pixel 11 Pro XL isn't likely to have much luck. </p><p>But you can't always predict these things ahead of time, and we will see what results the lab testing reveals following the 11 Pro XL's release.</p><p>The Pixel 11 Pro XL is also expected to offer 45W charging, which is slightly below that of the S26 Ultra's 60W speeds. However the two should be equal on the wireless charging front, with 25W Qi2.2 speeds, even if the Galaxy doesn't have the same built-in magnets as the Pixel. That said, the Galaxy S26 Ultra still offers reverse wireless charging, which Google scrapped last year.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-outlook"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We know a lot about the Pixel 11 Pro XL, even if the official reveal isn't scheduled until August 12. Sadly everything we've heard suggests that this is a basic run of the mill hardware upgrade from Google, which means it's going to struggle to compete with the Galaxy S26 Ultra — which is our pick for the best Android phone.</p><p>That said, we can't make an absolute decision until we have both phones in our possession, and compare their performance side by side. A lot of factors don't show up on the specs sheet, and the only way to figure out which phone is better is with hands-on testing. Performance, cameras and battery life are the main three.</p><p>So for now, it looks like Samsung may have the edge in a bunch of areas, even if Google hasn't quite given up yet. Still, for the time being, we're just going to have to be patient to see what Google actually has in store for us.</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/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200">Galaxy Z Fold 8 vs. Fold 8 Ultra camera zoom test: Don't spend the extra $200 until you see this</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">This is the Pixel 11 Pro Fold — and this is when pre-orders officially start</a></li><li><a href="https://www.tomsguide.com/phones/i-asked-siri-ai-and-gemini-a-series-of-increasingly-bizarre-questions-to-see-how-they-responded-heres-what-happened">I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-which-android-flagship-will-be-the-better-choice</link>
                                                                            <description>
                            <![CDATA[ Google Pixel 11 Pro XL is coming, but how to the leaks and rumors compare to Samsung's flagship Galaxy S26 Ultra? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Sqe9zms7f8LMXLwpxzBkmC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VfrarXRYBeYovgGwXRgoEX-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 06 Aug 2026 08:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/VfrarXRYBeYovgGwXRgoEX-1280-80.jpg">
                                                            <media:credit><![CDATA[Evan Blass / Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[google pixel 11 pro vs samsung galaxy s26 ultra]]></media:description>                                                            <media:text><![CDATA[google pixel 11 pro vs samsung galaxy s26 ultra]]></media:text>
                                <media:title type="plain"><![CDATA[google pixel 11 pro vs samsung galaxy s26 ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VfrarXRYBeYovgGwXRgoEX-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Google Pixel 11 Pro XL</a> is set to launch at the August 12 Made by Google event, alongside the rest of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series. If past releases are anything to go by, this should be the flagship Google phone for the year, with the largest display, best battery life and all the other things that make premium phones worth having. </p><p>But the question still remains, how will it compare to other flagships like the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Samsung Galaxy S26 Ultra</a>? Pixel phones typically lag behind their rivals in the hardware department, and while they do make up some of the distance with robust AI and software features, it still feels like something is missing. A new phone is a new opportunity to one-up the competition, but will the Pixel 11 Pro XL actually catch up to the Galaxy S26 Ultra?</p><p>Here's our rundown of Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra, based on all the rumors and leaks we've heard so far.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-specs"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11 Pro XL (rumored)</strong></p></td><td  ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $1,299</p></td><td  ><p>From $1,299</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.8-inch OLED</p></td><td  ><p>6.9-inch AMOLD</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB / 16GB</p></td><td  ><p>12GB / 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>42MP</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Camera</strong></p></td><td  ><p>50MP main, 48MP ultrawide, 48MP telephoto (5x zoom)</p></td><td  ><p>200MP main, 50MP ultrawide, 50MP telelphoto (5x zoom), 10MP telelphoto (3MP)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>5,115 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired, 25W wireless</p></td><td  ><p>45W wired, 25W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Operating System</strong></p></td><td  ><p>Android 16</p></td><td  ><p>One UI 8.5</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.4 x 3.01 x 0.33 inches</p></td><td  ><p>6.44 x 3.07 x 0.31 inches</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-price-availability"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Price & availability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="8897kp7dMTMmu9uULdRdmC" name="image (2)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/8897kp7dMTMmu9uULdRdmC.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>The Samsung Galaxy S26 Ultra is available right now, with a starting price of $1,299 for a model with 256GB of storage and 12GB of RAM. However, given the phone is a few months old, we have started seeing some significant discounts from various retailers — including Samsung itself.</p><p>The Google Pixel 11 Pro XL is expected to cost $100 more than last year's model, meaning the phone may start at $1,299. The cheapest model will reportedly come with 256GB of storage once again, but it may feature a memory downgrade with just 12GB of RAM — compared to 16GB in the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL</a>.</p><p>In other words, it looks like both phones will cost the same amount for similar core specs. </p><p>The Pixel 11 Pro XL release date isn't known right now, but new Google typically opens pre-orders for new Pixel devices at the end of the launch event, with the release day scheduled one to two weeks later. So expect to have your hands on a Pixel 11 Pro XL before the end of the month.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-design-display"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Design & display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nmC8mEhVxiXZQUnUDWbEKm" name="Samsung-Galaxy-S26-Ultra-home-screen" alt="Front view of Samsung Galaxy S26 Ultra held up against a brick wall" src="https://cdn.mos.cms.futurecdn.net/nmC8mEhVxiXZQUnUDWbEKm.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 Samsung Galaxy S26 Ultra is the larger of the two phones, rocking a 6.9-inch screen, measuring 6.44 x 3.07 x 0.31 in and weighing 7.55 oz. Meanwhile the Pixel 11 Pro XL is expected to come with a 6.8-inch display, measure 6.4 x 30.1 x 0.33 inches and weigh 7.9 ounces. That means, despite being slightly smaller, it is a heavier device — though part of that will come from the <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 magnets</a> in the back of the 11 Pro XL.</p><p>The 11 Pro XL's screen is tipped to be brighter, with<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades"> leaks promising a 3,600 nit display</a>, compared to the 2,600 nit S26 Ultra. This should prove beneficial for the 11 Pro XL in bright situations, though it's unclear if it will have an anti-reflective coating the same way Samsung offers. Likewise, it's unlikely we'll see the <a href="https://www.tomsguide.com/phones/samsung-phones/the-galaxy-s26-ultras-privacy-display-is-more-exciting-to-me-than-any-ai-feature">Privacy Display</a> features from Google anytime soon.</p><p>Both phones should offer rounded corners, though Google has the horizontal triple-lens camera bar while Samsung has stuck with the vertical quad-lens system for another generation. However Samsung's phone lacks the "<a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">Pixel Glow</a>" feature that's rumored to be coming to all Pixel 11 phones, and is expected to serve as a notification light on the back of the device.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-performance"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="MMVKYt4EStWuesGovSJ8oC" name="image (3)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/MMVKYt4EStWuesGovSJ8oC.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>Performance is not the area Google usually excels at, especially since it moved to Tensor chips. Considering this, and how high the performance benchmarks are for Galaxy S26 Ultra's <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Snapdragon 8 Elite Gen 5 for Galaxy</a>, we should not expect to see the Pixel 11 Pro XL topping any benchmark leagues following its release.</p><p>That's especially true when you remember some of the rumored changes coming to this year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-tensor-g5-and-g6-chips-forecasted-to-lag-behind-apple-and-qualcomm">Tensor G6 chip</a>. The G6 is rumored to drop to seven cores, instead of the usual eight, though it will be built on TSMC's 2nm process — which improves transistor density, and in the process boosts performance and power efficiency. To make matters worse, Google is utilizing a <a href="https://www.tomsguide.com/ai/google-to-remove-samsung-from-its-tensor-g6-modem-heres-why-that-matters">MediaTek M90 modem,</a> which is several years old at this point.</p><p>There's more to performance than benchmarks and the latest hardware, but considering Google's track record with weak performance, you'd have thought it would make more of an effort.</p><p>The 11 Pro XL is also expected to come with a new <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Titan M3 security chip</a>, which will supposedly feature a new "Tensor Processing Unit" and offer forwards-compatible protection against whatever future cyberattacks bad actors might develop — though how that compares to the latest version of Samsung's Knox isn't clear.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-cameras"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2715px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vbGrCLaZGfUvCojyg8YYUd" name="Galaxy S26 Ultra 24 hours-12" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/vbGrCLaZGfUvCojyg8YYUd.jpg" mos="" align="middle" fullscreen="" width="2715" height="1527" 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>On paper the Galaxy S26 Ultra has the advantage in the camera department. The phone is equipped with a 200MP main camera lens, partnered with a 50MP ultrawide lens, 50MP telephoto lens with 5x optical zoom and a 10MP secondary telephoto capable of 3x optical zoom — plus a 12MP selfie camera on the front.</p><p>In contrast, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">Pixel 11 Pro XL is expected to come with a 50MP main camera</a>, 48MP ultrawide and a 48MP telephoto lens with 5x optical zoom (and up to <a href="https://www.androidheadlines.com/2026/08/new-leaks-confirm-the-pixel-11-pros-120x-zoom-feature.html" target="_blank">120x AI assisted digital zoom</a>). There's no word on what sort of resolution to expect from the selfie camera, but you shouldn't expect anything less than the 42MP lens from the Pixel 10 Pro XL.</p><p>Obviously we won't know how much better or worse the Pixel 11 Pro XL's cameras are compared to S26 Ultra until we actually get our hands on the phone. Camera hardware only tells you so much, especially with how important software has become to the photography process. So we'll have to do some thorough hands-on testing </p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-software-ai"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Software & AI</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1154px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="XT3UDi3a4UHzdbWs5SN5P3" name="Pixel 11 render" alt="Pixel 11 render" src="https://cdn.mos.cms.futurecdn.net/XT3UDi3a4UHzdbWs5SN5P3.jpg" mos="" align="middle" fullscreen="" width="1154" height="649" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks / Android Headlines)</span></figcaption></figure><p>Software is easily the area where Pixel phones excel, especially since the 11 Pro XL will be several months newer than the Galaxy S26 Ultra. The phone will have the usual array of software benefits, including first-in-line access to the latest Android updates, quarterly Pixel drops with new features, and the latest and best AI Google has to offer.</p><p>Samsung usually isn't that far behind, though. While One UI has had some hiccups in rolling out to everyone, Samsung tends to be pretty good at getting new updates to users fairly quickly. Just not as quickly as Google does with Pixel.</p><p>Likewise Samsung has invested a lot in AI, and there's been a lot of crossover between Pixel and Galaxy phones when it comes to the latest features. So we won't know for sure who has the best AI suite until Google actually reveals what the Pixel 11 series has to offer.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-battery-charging"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Battery & charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3755px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iGGyvv7a4hQPrn26YbFnid" name="Galaxy S26 Ultra 24 hours-11" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/iGGyvv7a4hQPrn26YbFnid.jpg" mos="" align="middle" fullscreen="" width="3755" height="2112" 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>Battery life is another thing Pixels flag on compared to Samsung, but we won't know how much has changed until we actually test the 11 Pro XL's battery life for ourselves. However, the phone has a slightly smaller 5,115 mAh battery compared to the Pixel 10 Pro XL, which doesn't fill us with a lot of confidence.</p><p>The 10 Pro XL lasted 14 hours and 35 minutes in our custom battery test, compared to the 16 hours and 10 minutes recorded by the S26 Ultra. If the Pixel 10 Pro XL can't beat the S26 Ultra's 5,000 mAh battery life, then a smaller Pixel 11 Pro XL isn't likely to have much luck. </p><p>But you can't always predict these things ahead of time, and we will see what results the lab testing reveals following the 11 Pro XL's release.</p><p>The Pixel 11 Pro XL is also expected to offer 45W charging, which is slightly below that of the S26 Ultra's 60W speeds. However the two should be equal on the wireless charging front, with 25W Qi2.2 speeds, even if the Galaxy doesn't have the same built-in magnets as the Pixel. That said, the Galaxy S26 Ultra still offers reverse wireless charging, which Google scrapped last year.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-outlook"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We know a lot about the Pixel 11 Pro XL, even if the official reveal isn't scheduled until August 12. Sadly everything we've heard suggests that this is a basic run of the mill hardware upgrade from Google, which means it's going to struggle to compete with the Galaxy S26 Ultra — which is our pick for the best Android phone.</p><p>That said, we can't make an absolute decision until we have both phones in our possession, and compare their performance side by side. A lot of factors don't show up on the specs sheet, and the only way to figure out which phone is better is with hands-on testing. Performance, cameras and battery life are the main three.</p><p>So for now, it looks like Samsung may have the edge in a bunch of areas, even if Google hasn't quite given up yet. Still, for the time being, we're just going to have to be patient to see what Google actually has in store for us.</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/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200">Galaxy Z Fold 8 vs. Fold 8 Ultra camera zoom test: Don't spend the extra $200 until you see this</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">This is the Pixel 11 Pro Fold — and this is when pre-orders officially start</a></li><li><a href="https://www.tomsguide.com/phones/i-asked-siri-ai-and-gemini-a-series-of-increasingly-bizarre-questions-to-see-how-they-responded-heres-what-happened">I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Made by Google 2026 preview: Pixel 11, Pixel Watch 5, Pixel Tag and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Made by Google event is set to take place on August 12, and with it should come the reveal of Google's next wave of smartphones and wearables.</p><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series is set to be the star of the event, and as usual those four phones are expected to arrive alongside a new wearable in the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-5-rumors-everything-we-know-so-far">Pixel Watch 5</a>. But they might not be the only new products on the agenda, thanks to rumors of a Pixel Tag tracker. There's also the possibility that we may hear more about Android XR glasses, new Pixel Buds, and the still-unreleased Googlebook.</p><p>Here's what you need to know about Made by Google 2026.</p><h3 class="article-body__section" id="section-how-to-watch-made-by-google"><span>How to watch Made by Google</span></h3><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="36h2raBaZY9kM2b4agDQQT" name="Made by Google ‘25 1-14-40 screenshot" alt="Noah introducing Pixel Watch 4" src="https://cdn.mos.cms.futurecdn.net/36h2raBaZY9kM2b4agDQQT.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Made by Google is scheduled to take place on August 12, starting at 6 p.m. ET / 3 p.m. PT / 11 p.m. BST. The event itself will be taking place in New York, but you'll be able to tune in yourself and watch the whole thing live. Hopefully it's better than <a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2025-event">last year's event</a>, which was a bizarre take on the talk show format with host Jimmy Fallon.</p><p>The live stream isn't actually live yet, but you'll be able to watch everything on the <a href="https://www.youtube.com/c/madebygoogle" target="_blank" rel="nofollow">Made by Google YouTube page</a>. We will be embedding the video as soon as it's available, so be sure to check back later to watch the event as it unfolds. Or, alternatively, you can add a reminder <a href="https://store.google.com/magazine/google_pixel_11" target="_blank" rel="nofollow">from the Google Store</a>, so you don't accidentally miss out.</p><h3 class="article-body__section" id="section-pixel-11-pixel-11-pro-and-pixel-11-pro-fold"><span>Pixel 11, Pixel 11 Pro and Pixel 11 Pro Fold</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Pixel 10 offered some pretty substantial upgrades last year, and that means we shouldn't expect a similar leap to the Pixel 11. So expect the same horizontal triple-lens camera bar, rounded corners and all those design details that make the Pixel 11 what it is. </p><p>The same is looking to be true of the Pixel 11 <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pro, 11 Pro XL</a> and <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">Pixel 11 Pro Fold</a>, and means all three phones will presumably come with the usual array of incremental upgrades like the <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Tensor G6 chipset</a> and token camera improvements. Sadly, leaks suggest that battery capacity may be declining, which doesn't bode well for the battery life of this year's models. </p><p>The main change is expected to be the new <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">Pixel Glow feature</a>, which adds multi-colored notification alerts to the back of your phone. Fellow<a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-tipped-for-gimmicky-feature-they-should-have-ditched-years-ago"> temperature-sensor critics </a>will also be glad to hear that it appears to have vanished, with no sign of the silver sensor on the back of leaked Pixel 11 Pro renders. </p><p>The price is also expected to go up by around $100 per phone, which is sadly pretty standard news for new phones nowadays. The good news is that the rumors claim Google will also be doubling base storage to 256GB on the Pixel 11 and 11 Pro, which means those buying the cheaper handsets at least get something out of it.</p><h3 class="article-body__section" id="section-pixel-watch-5"><span>Pixel Watch 5</span></h3><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="yUK7WGbaQNpRSYJsSTQfG" name="Pixel-Watch-4-3" alt="Pixel Watch 4 on wrist showing time, weather and heart rate." src="https://cdn.mos.cms.futurecdn.net/yUK7WGbaQNpRSYJsSTQfG.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>Google is known for leaking in some truly bizarre ways, but the Pixel Watch 5 might be the strangest so far. An early-version of the smartwatch was actually <a href="https://x.com/i/status/2061147076096872836" target="_blank">found from the ocean floor by a diver</a>, giving some early insight into what the next iteration of Google's smartwatch might offer. Later leaks have filled in some of those gaps, though few things are particularly surprising.</p><p>The design is expected to stay more or less the same as the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch 4</a>, which isn't so bad. Sadly, the chipset is also expected to stay the same, but recent leaks do suggest that a few major changes are coming. </p><p>So expect to see a watch with new health features, including one that can be set to automatically dial 911, and <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-5-key-specs-just-leaked-heres-whats-coming">upgraded levels of RAM and storage</a>. However, the price is also expected to rise slightly, with new leaks suggesting a €20 (likely $20) price hike on the smaller 41mm models.</p><h3 class="article-body__section" id="section-pixel-tag"><span>Pixel Tag</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:730px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="VVqwn8F6xnXkxbzuxKyKvN" name="Screenshot 2026-08-04 170414" alt="leaked pixel tag images" src="https://cdn.mos.cms.futurecdn.net/v2/t:27,l:0,cw:730,ch:411,q:80/VVqwn8F6xnXkxbzuxKyKvN.png" mos="" align="middle" fullscreen="" width="730" height="472" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 9to5Google)</span></figcaption></figure><p>Early retail listings have exposed the existence of a "<a href="https://9to5google.com/2026/07/31/this-is-the-google-pixel-tag/" target="_blank">Pixel Tag</a>," which is Google's attempt to enter the Bluetooth tracker market. Leaks show off an ovular-looking tracker, similar to <a href="https://www.tomsguide.com/tech/samsung-galaxy-smarttag-2-review">Galaxy SmartTags</a>, but without the hole that can connect it to keys and bags. That suggests it will be reliant on cases and other accessories, much like <a href="https://www.tomsguide.com/reviews/apple-airtags">Apple's AirTags.</a></p><p>What we don't know is whether this tag will support ultra wideband connectivity, which allows for hyper-specific tracking, or what kind of battery it relies on. However, the leaked descriptions point out that it can be used to track things like luggage using Google's Find Hub, and features a loud speaker for easy search capabilities.  Pricing and release information is unclear.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eJqZrX"></div>                            </div>                            <script src="https://kwizly.com/embed/eJqZrX.js" async></script><h3 class="article-body__section" id="section-other-possible-appearances"><span>Other possible appearances</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4096px;"><p class="vanilla-image-block" style="padding-top:74.27%;"><img id="uCx95t8GvqBqx2ARtBSDuH" name="Googlebook-4" alt="Googlebook" src="https://cdn.mos.cms.futurecdn.net/uCx95t8GvqBqx2ARtBSDuH.jpg" mos="" align="middle" fullscreen="" width="4096" height="3042" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Smartphones and watches are usually the stars of Made by Google events, but that doesn't mean we won't get to see other reveals or news on August 12. The fact is, Google has a vested interest in a lot of different things, and any number of them could make an appearance on stage.</p><p><a href="https://www.tomsguide.com/reviews/google-pixel-buds-pro-2">Pixel Buds Pro 2</a> are nearing their second birthday, which means we could be looking at the launch of Pixel Buds Pro 3 in the near future. Likewise, Google has been hyping up XR, even revealing <a href="https://www.tomsguide.com/computing/smart-glasses/forget-meta-ray-bans-samsungs-intelligent-eyewear-glasses-just-launched-at-google-i-o-and-theyre-coming-this-fall">Samsung's Intelligent Eyewear</a> at Google I/O back in May, and any sort of related news could pop up.</p><p>If I were a betting man, I'd wager that the <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebook</a> will make some kind of appearance at Made by Google, following its reveal at I/O. Google confirmed that the new Android-powered laptop will arrive during the fall, and that season is rapidly approaching. At the very least we should get confirmation on when the the first Googlebooks will arrive, and how much they're likely to cost.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/how-i-use-google-maps-to-time-travel-avoid-bad-air-and-survive-zero-service">How I use Google Maps to time travel, avoid bad air, and survive zero service</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">I tried the new Galaxy AI video tracker on my Z Fold 8 — and it fixes my biggest problem with phone videos</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-used-a-thermal-camera-to-see-how-hot-the-galaxy-z-fold-8-ultra-gets-compared-to-the-galaxy-s26-ultra-heres-what-happened">I used a thermal camera to see how hot the Galaxy Z Fold 8 Ultra gets compared to the Galaxy S26 Ultra — here's what happened</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2026-preview-pixel-11-pixel-watch-5-pixel-tag-and-more</link>
                                                                            <description>
                            <![CDATA[ The next Made by Google event is scheduled for August 12, bringing with it the next wave of Google phones and devices. Here's what to expect. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">sbyxnTPyKUVWqkUqVuGWUX</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Ew4zuorgkGJi2y43LdCL54-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 05 Aug 2026 05:30:00 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Aug 2026 13:34:46 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/Ew4zuorgkGJi2y43LdCL54-1280-80.jpg">
                                                            <media:credit><![CDATA[Evan Blass]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 Pro leaked image]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 Pro leaked image]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 Pro leaked image]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Ew4zuorgkGJi2y43LdCL54-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Made by Google event is set to take place on August 12, and with it should come the reveal of Google's next wave of smartphones and wearables.</p><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series is set to be the star of the event, and as usual those four phones are expected to arrive alongside a new wearable in the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-5-rumors-everything-we-know-so-far">Pixel Watch 5</a>. But they might not be the only new products on the agenda, thanks to rumors of a Pixel Tag tracker. There's also the possibility that we may hear more about Android XR glasses, new Pixel Buds, and the still-unreleased Googlebook.</p><p>Here's what you need to know about Made by Google 2026.</p><h3 class="article-body__section" id="section-how-to-watch-made-by-google"><span>How to watch Made by Google</span></h3><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="36h2raBaZY9kM2b4agDQQT" name="Made by Google ‘25 1-14-40 screenshot" alt="Noah introducing Pixel Watch 4" src="https://cdn.mos.cms.futurecdn.net/36h2raBaZY9kM2b4agDQQT.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Made by Google is scheduled to take place on August 12, starting at 6 p.m. ET / 3 p.m. PT / 11 p.m. BST. The event itself will be taking place in New York, but you'll be able to tune in yourself and watch the whole thing live. Hopefully it's better than <a href="https://www.tomsguide.com/phones/google-pixel-phones/made-by-google-2025-event">last year's event</a>, which was a bizarre take on the talk show format with host Jimmy Fallon.</p><p>The live stream isn't actually live yet, but you'll be able to watch everything on the <a href="https://www.youtube.com/c/madebygoogle" target="_blank" rel="nofollow">Made by Google YouTube page</a>. We will be embedding the video as soon as it's available, so be sure to check back later to watch the event as it unfolds. Or, alternatively, you can add a reminder <a href="https://store.google.com/magazine/google_pixel_11" target="_blank" rel="nofollow">from the Google Store</a>, so you don't accidentally miss out.</p><h3 class="article-body__section" id="section-pixel-11-pixel-11-pro-and-pixel-11-pro-fold"><span>Pixel 11, Pixel 11 Pro and Pixel 11 Pro Fold</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Pixel 10 offered some pretty substantial upgrades last year, and that means we shouldn't expect a similar leap to the Pixel 11. So expect the same horizontal triple-lens camera bar, rounded corners and all those design details that make the Pixel 11 what it is. </p><p>The same is looking to be true of the Pixel 11 <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pro, 11 Pro XL</a> and <a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">Pixel 11 Pro Fold</a>, and means all three phones will presumably come with the usual array of incremental upgrades like the <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Tensor G6 chipset</a> and token camera improvements. Sadly, leaks suggest that battery capacity may be declining, which doesn't bode well for the battery life of this year's models. </p><p>The main change is expected to be the new <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">Pixel Glow feature</a>, which adds multi-colored notification alerts to the back of your phone. Fellow<a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-tipped-for-gimmicky-feature-they-should-have-ditched-years-ago"> temperature-sensor critics </a>will also be glad to hear that it appears to have vanished, with no sign of the silver sensor on the back of leaked Pixel 11 Pro renders. </p><p>The price is also expected to go up by around $100 per phone, which is sadly pretty standard news for new phones nowadays. The good news is that the rumors claim Google will also be doubling base storage to 256GB on the Pixel 11 and 11 Pro, which means those buying the cheaper handsets at least get something out of it.</p><h3 class="article-body__section" id="section-pixel-watch-5"><span>Pixel Watch 5</span></h3><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="yUK7WGbaQNpRSYJsSTQfG" name="Pixel-Watch-4-3" alt="Pixel Watch 4 on wrist showing time, weather and heart rate." src="https://cdn.mos.cms.futurecdn.net/yUK7WGbaQNpRSYJsSTQfG.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>Google is known for leaking in some truly bizarre ways, but the Pixel Watch 5 might be the strangest so far. An early-version of the smartwatch was actually <a href="https://x.com/i/status/2061147076096872836" target="_blank">found from the ocean floor by a diver</a>, giving some early insight into what the next iteration of Google's smartwatch might offer. Later leaks have filled in some of those gaps, though few things are particularly surprising.</p><p>The design is expected to stay more or less the same as the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch 4</a>, which isn't so bad. Sadly, the chipset is also expected to stay the same, but recent leaks do suggest that a few major changes are coming. </p><p>So expect to see a watch with new health features, including one that can be set to automatically dial 911, and <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-5-key-specs-just-leaked-heres-whats-coming">upgraded levels of RAM and storage</a>. However, the price is also expected to rise slightly, with new leaks suggesting a €20 (likely $20) price hike on the smaller 41mm models.</p><h3 class="article-body__section" id="section-pixel-tag"><span>Pixel Tag</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:730px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="VVqwn8F6xnXkxbzuxKyKvN" name="Screenshot 2026-08-04 170414" alt="leaked pixel tag images" src="https://cdn.mos.cms.futurecdn.net/v2/t:27,l:0,cw:730,ch:411,q:80/VVqwn8F6xnXkxbzuxKyKvN.png" mos="" align="middle" fullscreen="" width="730" height="472" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 9to5Google)</span></figcaption></figure><p>Early retail listings have exposed the existence of a "<a href="https://9to5google.com/2026/07/31/this-is-the-google-pixel-tag/" target="_blank">Pixel Tag</a>," which is Google's attempt to enter the Bluetooth tracker market. Leaks show off an ovular-looking tracker, similar to <a href="https://www.tomsguide.com/tech/samsung-galaxy-smarttag-2-review">Galaxy SmartTags</a>, but without the hole that can connect it to keys and bags. That suggests it will be reliant on cases and other accessories, much like <a href="https://www.tomsguide.com/reviews/apple-airtags">Apple's AirTags.</a></p><p>What we don't know is whether this tag will support ultra wideband connectivity, which allows for hyper-specific tracking, or what kind of battery it relies on. However, the leaked descriptions point out that it can be used to track things like luggage using Google's Find Hub, and features a loud speaker for easy search capabilities.  Pricing and release information is unclear.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eJqZrX"></div>                            </div>                            <script src="https://kwizly.com/embed/eJqZrX.js" async></script><h3 class="article-body__section" id="section-other-possible-appearances"><span>Other possible appearances</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4096px;"><p class="vanilla-image-block" style="padding-top:74.27%;"><img id="uCx95t8GvqBqx2ARtBSDuH" name="Googlebook-4" alt="Googlebook" src="https://cdn.mos.cms.futurecdn.net/uCx95t8GvqBqx2ARtBSDuH.jpg" mos="" align="middle" fullscreen="" width="4096" height="3042" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Smartphones and watches are usually the stars of Made by Google events, but that doesn't mean we won't get to see other reveals or news on August 12. The fact is, Google has a vested interest in a lot of different things, and any number of them could make an appearance on stage.</p><p><a href="https://www.tomsguide.com/reviews/google-pixel-buds-pro-2">Pixel Buds Pro 2</a> are nearing their second birthday, which means we could be looking at the launch of Pixel Buds Pro 3 in the near future. Likewise, Google has been hyping up XR, even revealing <a href="https://www.tomsguide.com/computing/smart-glasses/forget-meta-ray-bans-samsungs-intelligent-eyewear-glasses-just-launched-at-google-i-o-and-theyre-coming-this-fall">Samsung's Intelligent Eyewear</a> at Google I/O back in May, and any sort of related news could pop up.</p><p>If I were a betting man, I'd wager that the <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebook</a> will make some kind of appearance at Made by Google, following its reveal at I/O. Google confirmed that the new Android-powered laptop will arrive during the fall, and that season is rapidly approaching. At the very least we should get confirmation on when the the first Googlebooks will arrive, and how much they're likely to cost.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/how-i-use-google-maps-to-time-travel-avoid-bad-air-and-survive-zero-service">How I use Google Maps to time travel, avoid bad air, and survive zero service</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">I tried the new Galaxy AI video tracker on my Z Fold 8 — and it fixes my biggest problem with phone videos</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-used-a-thermal-camera-to-see-how-hot-the-galaxy-z-fold-8-ultra-gets-compared-to-the-galaxy-s26-ultra-heres-what-happened">I used a thermal camera to see how hot the Galaxy Z Fold 8 Ultra gets compared to the Galaxy S26 Ultra — here's what happened</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ This is the Pixel 11 Pro Fold — and this is when pre-orders officially start ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Last week, <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-images-just-leaked-ahead-of-launch-see-it-from-every-angle-including-a-weird-led">leaked images </a>of the forthcoming <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro Fold</a> popped up, and now Google is officially teasing its phone. </p><p>The 15-second teaser video briefly shows hints of the foldable alongside this voice-over: "To switch phones, you have to be open to what's new. And to what opens."</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/eSBwmBHCQwI" allowfullscreen></iframe></div></div><p>The video is similar to the <a href="https://www.youtube.com/watch?v=PmV-IMX0YNQ" target="_blank">teaser for the Pixel 11 Pro </a>released last week. The most important information in the video is at the end with the date August 12, 2026, which is when we expect Google to announce the full Pixel 11 lineup. </p><p>The <a href="https://store.google.com/?hl=en-US" target="_blank">Google Store homepage</a> is currently listing pre-orders for the PIxel 11 as starting August 12. I also spotted a pre-order page on Best Buy. Both pages feature a countdown that runs until August 12 at 7 a.m. PT/10 a.m. ET/2 p.m. UK. </p><h2 id="release-date">Release date</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1440px;"><p class="vanilla-image-block" style="padding-top:53.75%;"><img id="fuxkYBmjYhZmgRvP8sg2An" name="57c9a905-1571-4466-92fc-9778064fc966_1440x774" alt="Leaked image of the Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/fuxkYBmjYhZmgRvP8sg2An.png" mos="" align="middle" fullscreen="" width="1440" height="774" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>This does suggest that you'll be able to pre-order the device before the announcement, which isn't supposed to kick off <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-release-date-and-prices-leak-as-official-august-12-pixel-event-invites-go-out">until 6 p.m. ET that day</a>.</p><p>Google devices usually hit store shelves a week or two after the announcement. This means the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-release-date-and-prices-leak-as-official-august-12-pixel-event-invites-go-out">Pixel 11</a> series should launch on August 19 or August 26. </p><p>As for price, given the ongoing memory crisis, we expect a price increase. Google has managed to keep the Pixel Pro Fold at $1,799 for the last two years, but another $100 or $200 on top of that seems likely.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">We've tested the best Android phones available right now from Samsung, Google and Motorola</a></li><li><a href="https://www.tomsguide.com/phones/i-asked-siri-ai-and-gemini-a-series-of-increasingly-bizarre-questions-to-see-how-they-responded-heres-what-happened">I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened</a></li><li><a href="https://www.tomsguide.com/computing/online-security/incognito-mode-is-a-total-lie-and-it-cost-google-5-billion">Incognito mode is a total lie – and it cost Google $5 billion</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start</link>
                                                                            <description>
                            <![CDATA[ Google just teased its own Pixel 11 foldable phone and confirmed the pre-order date. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nwLaXThcwKKDNnivjipbYZ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/X3Fg9RnS6qMbpZ4SP7bZGa-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 03 Aug 2026 22:26:20 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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;br&gt;Send secure tips on Signal: scyo1.55.&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/X3Fg9RnS6qMbpZ4SP7bZGa-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 10 Pro Fold]]></media:description>                                                            <media:text><![CDATA[Google Pixel 10 Pro Fold]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 10 Pro Fold]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/X3Fg9RnS6qMbpZ4SP7bZGa-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Last week, <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-images-just-leaked-ahead-of-launch-see-it-from-every-angle-including-a-weird-led">leaked images </a>of the forthcoming <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro Fold</a> popped up, and now Google is officially teasing its phone. </p><p>The 15-second teaser video briefly shows hints of the foldable alongside this voice-over: "To switch phones, you have to be open to what's new. And to what opens."</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/eSBwmBHCQwI" allowfullscreen></iframe></div></div><p>The video is similar to the <a href="https://www.youtube.com/watch?v=PmV-IMX0YNQ" target="_blank">teaser for the Pixel 11 Pro </a>released last week. The most important information in the video is at the end with the date August 12, 2026, which is when we expect Google to announce the full Pixel 11 lineup. </p><p>The <a href="https://store.google.com/?hl=en-US" target="_blank">Google Store homepage</a> is currently listing pre-orders for the PIxel 11 as starting August 12. I also spotted a pre-order page on Best Buy. Both pages feature a countdown that runs until August 12 at 7 a.m. PT/10 a.m. ET/2 p.m. UK. </p><h2 id="release-date">Release date</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1440px;"><p class="vanilla-image-block" style="padding-top:53.75%;"><img id="fuxkYBmjYhZmgRvP8sg2An" name="57c9a905-1571-4466-92fc-9778064fc966_1440x774" alt="Leaked image of the Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/fuxkYBmjYhZmgRvP8sg2An.png" mos="" align="middle" fullscreen="" width="1440" height="774" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>This does suggest that you'll be able to pre-order the device before the announcement, which isn't supposed to kick off <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-release-date-and-prices-leak-as-official-august-12-pixel-event-invites-go-out">until 6 p.m. ET that day</a>.</p><p>Google devices usually hit store shelves a week or two after the announcement. This means the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-release-date-and-prices-leak-as-official-august-12-pixel-event-invites-go-out">Pixel 11</a> series should launch on August 19 or August 26. </p><p>As for price, given the ongoing memory crisis, we expect a price increase. Google has managed to keep the Pixel Pro Fold at $1,799 for the last two years, but another $100 or $200 on top of that seems likely.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">We've tested the best Android phones available right now from Samsung, Google and Motorola</a></li><li><a href="https://www.tomsguide.com/phones/i-asked-siri-ai-and-gemini-a-series-of-increasingly-bizarre-questions-to-see-how-they-responded-heres-what-happened">I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened</a></li><li><a href="https://www.tomsguide.com/computing/online-security/incognito-mode-is-a-total-lie-and-it-cost-google-5-billion">Incognito mode is a total lie – and it cost Google $5 billion</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 Pro Fold images just leaked ahead of launch — see it from every angle (including a weird LED) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Summer is the season of the foldable; with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8 already reviewed</a> and Google slated for August, we turn our attention to the upcoming <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro Fold</a>. </p><p>A new leak from <a href="https://evleaks.substack.com/p/p11pf?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6608d2c0-7707-4156-82ca-a44b58a90bd1_1440x800.jpeg&open=false" target="_blank">semi-retired tipster Evan Blass</a> just revealed what appear to be marketing images that showcase Google's foldable smartphone from nearly every angle. </p><p>Take a look:</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/RGs362yg7sqWDX2WYmrbzm.jpg" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/tqrWUz5uki35wvhN49PJxm.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JWbH36PSQgtyXmspDkjYxm.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/qHdGvGNKxrvgzubCgkDpum.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/B7DVYcKUWVeAVRjuf7MEum.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure></figure><p>The images don't reveal any new specifications, save that the inner display will be 8 inches, similar to last year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>. It will also have Gemini Intelligence, which shouldn't be too surprising.</p><p>Blass' leaked images seem to match <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-renders-just-leaked-heres-whats-different">leaked renders that popped up in March</a>, showing a phone that looks much the same as its predecessor.</p><p>The one strange change appears to be a new LED position in the upper left corner of the camera array. On the Pixel 10 Pro Fold, the flashlight and LED light are set to the right of the camera lenses. </p><p>I'm curious how this new integration will work with the cameras. It does make the camera array smaller and cleaner-looking.</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:433px;"><p class="vanilla-image-block" style="padding-top:102.77%;"><img id="FCvAgY8j8KGgADcpavQzqm" name="d9a95443-3ebe-4f75-abe7-47fa9bf6466e_433x445" alt="Leaked image of the Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/FCvAgY8j8KGgADcpavQzqm.png" mos="" align="middle" fullscreen="" width="433" height="445" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>Surprisingly, we haven't seen too many leaks for the Pixel 11 Pro Fold. From everything that has popped up, don't expect too many exterior changes. </p><p>The biggest change will likely be an upgraded Tensor G6 chipset, which should be more powerful than the Tensor G5, which was a step up from the G4 but still lagged behind the Samsung Galaxy S25 Plus and iPhone 16 Pro.</p><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-could-finally-catch-up-to-samsung-and-apple-on-performance-heres-how">G6 chipset will reportedly be built using the 2nm manufacturing process</a>, which means improved performance and efficiency thanks to increased transistor density.</p><h2 id="small-look-at-the-pixel-watch-5-and-pixel-buds">Small look at the Pixel Watch 5 and Pixel Buds</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7zeTvovRmxF5YteV4aCNrm.png" alt="Leaked image of the Google Pixel Watch 5" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vKpAChjp7hShqsEsgDVpum.png" alt="Leaked image of new Google Pixel Buds" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure></figure><p>Buried at the bottom of Blass' newsletter are two smaller leaks; single images showcase what appear to be the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-5-rumors-everything-we-know-so-far">Pixel Watch 5</a> and a pair of Pixel Buds. It's not clear whether these are the Pro models.</p><p>Like the Pixel 11 Pro Fold, it seems Google isn't changing anything design-wise for its smartwatch. The big change might be a new Tensor chipset and some updated health features.</p><h2 id="pixel-11-pro-fold-release-date-and-price">Pixel 11 Pro Fold release date and 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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WGbuXswxTtiutkFqRd3AJa" name="Google Pixel 10 Pro Fold" alt="Google Pixel 10 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/WGbuXswxTtiutkFqRd3AJa.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>Earlier this month, Bloomberg's Mark Gurman reported on an invite for the next Google Pixel event, which is set to take place <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-release-date-and-prices-leak-as-official-august-12-pixel-event-invites-go-out">in New York City on August 12</a> starting at 6 PM ET, a surprisingly late launch time.</p><p>Google phones typically hit store shelves about a week or two after events. The Pixel 9 was released on August 22, 2024, while the Pixel 10 hit on August 29, 2025. I expect a similar timeframe for the Pixel 11 series.</p><p>As for pricing,  given the <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">soaring cost of memory</a>, I wouldn't be surprised if we see a price increase. The Pixel Pro has been set at $999 for the last three years, but another $100 or $200 price seems likely.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-use-ai-but-i-dont-want-ai-making-my-choices-toms-guide-readers-sound-off-on-google-ai-search">'I use AI, but I don't want AI making my choices': Tom's Guide readers sound off on Google AI search</a></li><li><a href="https://www.tomsguide.com/computing/vpns/google-vpn-was-doomed-from-day-one-how-lack-of-trust-meant-it-never-had-a-chance">Google VPN was doomed from day one – how lack of trust meant it never had a chance</a></li><li><a href="https://www.tomsguide.com/computing/smart-glasses/exclusive-even-realities-ceo-slams-meta-ray-bans-we-dont-thrive-on-selling-data">Exclusive: Even Realities CEO slams Meta Ray-Bans — we 'don’t thrive on selling data’</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-images-just-leaked-ahead-of-launch-see-it-from-every-angle-including-a-weird-led</link>
                                                                            <description>
                            <![CDATA[ The forthcoming Google Pixel 11 Pro Fold has appeared in leaked images, including peeks at the Pixel Watch 5 and new Pixel Buds. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">UpkJZxXWSotqTFQni4Jv3E</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wVxBg3nRM8LJUk4YxJmXy3-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 30 Jul 2026 19:08:34 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/wVxBg3nRM8LJUk4YxJmXy3-1280-80.jpg">
                                                            <media:credit><![CDATA[Evan Blass]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 Pro Fold]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 Pro Fold]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 Pro Fold]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wVxBg3nRM8LJUk4YxJmXy3-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Summer is the season of the foldable; with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8 already reviewed</a> and Google slated for August, we turn our attention to the upcoming <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro Fold</a>. </p><p>A new leak from <a href="https://evleaks.substack.com/p/p11pf?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6608d2c0-7707-4156-82ca-a44b58a90bd1_1440x800.jpeg&open=false" target="_blank">semi-retired tipster Evan Blass</a> just revealed what appear to be marketing images that showcase Google's foldable smartphone from nearly every angle. </p><p>Take a look:</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/RGs362yg7sqWDX2WYmrbzm.jpg" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/tqrWUz5uki35wvhN49PJxm.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JWbH36PSQgtyXmspDkjYxm.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/qHdGvGNKxrvgzubCgkDpum.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/B7DVYcKUWVeAVRjuf7MEum.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure></figure><p>The images don't reveal any new specifications, save that the inner display will be 8 inches, similar to last year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>. It will also have Gemini Intelligence, which shouldn't be too surprising.</p><p>Blass' leaked images seem to match <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-renders-just-leaked-heres-whats-different">leaked renders that popped up in March</a>, showing a phone that looks much the same as its predecessor.</p><p>The one strange change appears to be a new LED position in the upper left corner of the camera array. On the Pixel 10 Pro Fold, the flashlight and LED light are set to the right of the camera lenses. </p><p>I'm curious how this new integration will work with the cameras. It does make the camera array smaller and cleaner-looking.</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:433px;"><p class="vanilla-image-block" style="padding-top:102.77%;"><img id="FCvAgY8j8KGgADcpavQzqm" name="d9a95443-3ebe-4f75-abe7-47fa9bf6466e_433x445" alt="Leaked image of the Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/FCvAgY8j8KGgADcpavQzqm.png" mos="" align="middle" fullscreen="" width="433" height="445" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>Surprisingly, we haven't seen too many leaks for the Pixel 11 Pro Fold. From everything that has popped up, don't expect too many exterior changes. </p><p>The biggest change will likely be an upgraded Tensor G6 chipset, which should be more powerful than the Tensor G5, which was a step up from the G4 but still lagged behind the Samsung Galaxy S25 Plus and iPhone 16 Pro.</p><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-could-finally-catch-up-to-samsung-and-apple-on-performance-heres-how">G6 chipset will reportedly be built using the 2nm manufacturing process</a>, which means improved performance and efficiency thanks to increased transistor density.</p><h2 id="small-look-at-the-pixel-watch-5-and-pixel-buds">Small look at the Pixel Watch 5 and Pixel Buds</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7zeTvovRmxF5YteV4aCNrm.png" alt="Leaked image of the Google Pixel Watch 5" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vKpAChjp7hShqsEsgDVpum.png" alt="Leaked image of new Google Pixel Buds" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure></figure><p>Buried at the bottom of Blass' newsletter are two smaller leaks; single images showcase what appear to be the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-5-rumors-everything-we-know-so-far">Pixel Watch 5</a> and a pair of Pixel Buds. It's not clear whether these are the Pro models.</p><p>Like the Pixel 11 Pro Fold, it seems Google isn't changing anything design-wise for its smartwatch. The big change might be a new Tensor chipset and some updated health features.</p><h2 id="pixel-11-pro-fold-release-date-and-price">Pixel 11 Pro Fold release date and 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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WGbuXswxTtiutkFqRd3AJa" name="Google Pixel 10 Pro Fold" alt="Google Pixel 10 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/WGbuXswxTtiutkFqRd3AJa.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>Earlier this month, Bloomberg's Mark Gurman reported on an invite for the next Google Pixel event, which is set to take place <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-release-date-and-prices-leak-as-official-august-12-pixel-event-invites-go-out">in New York City on August 12</a> starting at 6 PM ET, a surprisingly late launch time.</p><p>Google phones typically hit store shelves about a week or two after events. The Pixel 9 was released on August 22, 2024, while the Pixel 10 hit on August 29, 2025. I expect a similar timeframe for the Pixel 11 series.</p><p>As for pricing,  given the <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">soaring cost of memory</a>, I wouldn't be surprised if we see a price increase. The Pixel Pro has been set at $999 for the last three years, but another $100 or $200 price seems likely.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-use-ai-but-i-dont-want-ai-making-my-choices-toms-guide-readers-sound-off-on-google-ai-search">'I use AI, but I don't want AI making my choices': Tom's Guide readers sound off on Google AI search</a></li><li><a href="https://www.tomsguide.com/computing/vpns/google-vpn-was-doomed-from-day-one-how-lack-of-trust-meant-it-never-had-a-chance">Google VPN was doomed from day one – how lack of trust meant it never had a chance</a></li><li><a href="https://www.tomsguide.com/computing/smart-glasses/exclusive-even-realities-ceo-slams-meta-ray-bans-we-dont-thrive-on-selling-data">Exclusive: Even Realities CEO slams Meta Ray-Bans — we 'don’t thrive on selling data’</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 just leaked via Amazon — here's the specs, colors and obligatory price hike ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google has confirmed that the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> will launch on August 12, at a special event in New York, but you won't need to wait that long to find out everything. Google is notorious for leaking more than a porcupine's swimsuit, and the latest information to spill out possibly revealed full specs, pricing and colors.</p><p>The leak itself came from Amazon of all people (via <a href="https://9to5google.com/2026/07/13/this-might-be-the-pixel-11-in-three-colors-gallery/" target="_blank">9to5Google</a>), and while the retailer features a bunch of third-party sellers it seems the now-deleted listings came from Amazon itself. This means that there is a chance all of this information is bogus, though Amazon could just as easily have published information too early by accident.</p><p>The Pixel 11 was listed as coming in three colors: Obsidian, Hibiscus and Pistachio. However, descriptions instead label those shades as Midnight, Fuchsia and Moss — which lines up with previous leaks. The included photos show these colors to be (unsurprisingly), blue, lavender/purple and green.</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:879px;"><p class="vanilla-image-block" style="padding-top:54.72%;"><img id="Xh7cVygAaUyCUQ7a9CMNL4" name="Screenshot 2026-07-15 150303" alt="Pixel 11 and Pixel 11 pro colors" src="https://cdn.mos.cms.futurecdn.net/Xh7cVygAaUyCUQ7a9CMNL4.png" mos="" align="middle" fullscreen="" width="879" height="481" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 9to5Google)</span></figcaption></figure><p>Listings for the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a> mention colors called Dune, Light Fog, Pine and Sterling. My best guess based on the images is that Dune is a pinkish orange, Pine is some kind of muted green, Light Fog is a grayish white, which leaves Sterling as the vivid pink color. The <a href="https://www.tomsguide.com/phones/google-pixel-phones/samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-who-will-be-king-of-the-android-foldables">Pixel 11 Pro Fold</a> is also seen in Pine and Midnight, which are black and that same muted green as the 11 Pro.</p><h2 id="google-s-already-teasing-the-pixel-11-series">Google's already teasing the Pixel 11 series</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>While not officially a leak, Google has started teasing the Pixel 11 series with a short video clip <a href="https://store.google.com/magazine/google_pixel_11?hl=en-GB&pli=1" target="_blank" rel="nofollow">on its website</a>. Much like <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-unpacked-just-announced-for-july-22-with-new-form-factors-heres-how-to-save-up-to-usd1-230-on-your-galaxy-z-fold-8">Samsung is known to do</a>, Google is offering an exclusive discount to those people that sign up for Google Store updates ahead of the Pixel 11 launch.</p><p>That page also features a brief look at what we assume to be the Pixel 11, alongside an icon cycling through with rainbow coloring on the camera bar — where the LED flash is usually positioned. The phone is also gold, suggesting that a new color is on the way.</p><p>This new light is probably the rumored <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">"Pixel Glow" feature</a> that is expected to act as some sort of alert light on the back of the phone. Based on what we've heard, Pixel Glow will flash when you have a notification, during charging sessions and when you're interacting with Gemini.</p><p>The Pixel Glow alert starts in white, before cycling through those colors, which suggests this is actually the camera flash pulling a dual role. whether this will affect the intensity of the camera flash (or the flashlight feature) isn't clear. However, if this is a full RBG LED light on the back of the phone, it will be interesting to see if we can change the color of the flash for dramatic effect. We'll just have to wait and see.</p><h2 id="pixel-11-leaked-specs-and-price">Pixel 11 leaked specs and 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:1154px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="XT3UDi3a4UHzdbWs5SN5P3" name="Pixel 11 render" alt="Pixel 11 render" src="https://cdn.mos.cms.futurecdn.net/XT3UDi3a4UHzdbWs5SN5P3.jpg" mos="" align="middle" fullscreen="" width="1154" height="649" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks / Android Headlines)</span></figcaption></figure><p>The Amazon listings reveal a bunch of Pixel 11 series specs, which line up with everything we've heard about the phones so far. That includes a 6.3-inch display rocking 1080x2424 resolution, 256GB of base storage, 12GB of RAM, 4,985 mAh battery and a price tag of $899. This suggests that Google isn't dropping the base level of RAM to 8GB, <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">as some rumors have suggested</a>, but the starting price will be rising by $100.</p><p>This is the same price as a 256GB Pixel 10, but since there's no entry level 128GB option, it means the cost of entry is higher. It's almost like Schrodinger's price hike, in which the price has simultaneously increased despite not actually changing for that particular model. </p><p>One thing to point out is that these listings reportedly say that the Pixel 11 will arrive with Android 16. Considering <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</a> has been released, and is widely available on Pixel phones, that seems very unlikely. To the point where it casts doubt on the rest of the information that was presented. </p><p>In other words, don't take this leak as gospel, and remain skeptical right up until the point Google tells us what's actually going on on August 12.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O92KMX"></div>                            </div>                            <script src="https://kwizly.com/embed/O92KMX.js" async></script><p>The cost of the other models hasn't been mentioned, but we should expect that the Pixel 11 Pro should get a similar price bump as Google kills the 128GB option. Since the XL and Fold already start at 256GB, their U.S. pricing remains unclear, but if <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-release-date-and-prices-leak-as-official-august-12-pixel-event-invites-go-out">leaked EU prices are anything to go</a> by we should expect an additional $100 per phone.</p><p>The Pixel 11 Pro listing also mentions 12GB of RAM, which is a downgrade, alongside a 5,115 mAh battery for the Pixel 11 Pro XL and 4,750 mAh for the Pixel 11 Pro Fold. Those are <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">slightly higher capacities than the rumors have suggested</a>, but it is still a small downgrade from the equivalent <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a>. Apart from the Pixel 11, which is listed with 5 mAh more than the Pixel 10.</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/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">I've seen the Galaxy Z Fold 8's crease-free 'Flex Titanium' display — and Apple should be nervous</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/every-samsung-device-from-this-months-unpacked-just-leaked-heres-your-full-look-at-the-entire-lineup">Every Samsung device from this month's Unpacked just leaked — here's your full look at the entire lineup</a></li><li><a href="https://www.tomsguide.com/phones/i-just-saw-the-future-of-phones-inside-samsung-display-with-2-jaw-dropping-slidable-concepts">I just saw the future of phones inside Samsung Display with 2 jaw-dropping ‘slidable’ concepts</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike</link>
                                                                            <description>
                            <![CDATA[ Google Pixel 11 may have just leaked via Amazon, revealing color options, specs and a higher starting price. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aSJTadyFj8XftYGCAuoGrB</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/w4ggsUZxULQaBMcwv7iJs6-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 16 Jul 2026 09:26:25 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/w4ggsUZxULQaBMcwv7iJs6-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[google pixel 10 pro images]]></media:description>                                                            <media:text><![CDATA[google pixel 10 pro images]]></media:text>
                                <media:title type="plain"><![CDATA[google pixel 10 pro images]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/w4ggsUZxULQaBMcwv7iJs6-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google has confirmed that the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> will launch on August 12, at a special event in New York, but you won't need to wait that long to find out everything. Google is notorious for leaking more than a porcupine's swimsuit, and the latest information to spill out possibly revealed full specs, pricing and colors.</p><p>The leak itself came from Amazon of all people (via <a href="https://9to5google.com/2026/07/13/this-might-be-the-pixel-11-in-three-colors-gallery/" target="_blank">9to5Google</a>), and while the retailer features a bunch of third-party sellers it seems the now-deleted listings came from Amazon itself. This means that there is a chance all of this information is bogus, though Amazon could just as easily have published information too early by accident.</p><p>The Pixel 11 was listed as coming in three colors: Obsidian, Hibiscus and Pistachio. However, descriptions instead label those shades as Midnight, Fuchsia and Moss — which lines up with previous leaks. The included photos show these colors to be (unsurprisingly), blue, lavender/purple and green.</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:879px;"><p class="vanilla-image-block" style="padding-top:54.72%;"><img id="Xh7cVygAaUyCUQ7a9CMNL4" name="Screenshot 2026-07-15 150303" alt="Pixel 11 and Pixel 11 pro colors" src="https://cdn.mos.cms.futurecdn.net/Xh7cVygAaUyCUQ7a9CMNL4.png" mos="" align="middle" fullscreen="" width="879" height="481" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 9to5Google)</span></figcaption></figure><p>Listings for the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro</a> mention colors called Dune, Light Fog, Pine and Sterling. My best guess based on the images is that Dune is a pinkish orange, Pine is some kind of muted green, Light Fog is a grayish white, which leaves Sterling as the vivid pink color. The <a href="https://www.tomsguide.com/phones/google-pixel-phones/samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-who-will-be-king-of-the-android-foldables">Pixel 11 Pro Fold</a> is also seen in Pine and Midnight, which are black and that same muted green as the 11 Pro.</p><h2 id="google-s-already-teasing-the-pixel-11-series">Google's already teasing the Pixel 11 series</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>While not officially a leak, Google has started teasing the Pixel 11 series with a short video clip <a href="https://store.google.com/magazine/google_pixel_11?hl=en-GB&pli=1" target="_blank" rel="nofollow">on its website</a>. Much like <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-unpacked-just-announced-for-july-22-with-new-form-factors-heres-how-to-save-up-to-usd1-230-on-your-galaxy-z-fold-8">Samsung is known to do</a>, Google is offering an exclusive discount to those people that sign up for Google Store updates ahead of the Pixel 11 launch.</p><p>That page also features a brief look at what we assume to be the Pixel 11, alongside an icon cycling through with rainbow coloring on the camera bar — where the LED flash is usually positioned. The phone is also gold, suggesting that a new color is on the way.</p><p>This new light is probably the rumored <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">"Pixel Glow" feature</a> that is expected to act as some sort of alert light on the back of the phone. Based on what we've heard, Pixel Glow will flash when you have a notification, during charging sessions and when you're interacting with Gemini.</p><p>The Pixel Glow alert starts in white, before cycling through those colors, which suggests this is actually the camera flash pulling a dual role. whether this will affect the intensity of the camera flash (or the flashlight feature) isn't clear. However, if this is a full RBG LED light on the back of the phone, it will be interesting to see if we can change the color of the flash for dramatic effect. We'll just have to wait and see.</p><h2 id="pixel-11-leaked-specs-and-price">Pixel 11 leaked specs and 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:1154px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="XT3UDi3a4UHzdbWs5SN5P3" name="Pixel 11 render" alt="Pixel 11 render" src="https://cdn.mos.cms.futurecdn.net/XT3UDi3a4UHzdbWs5SN5P3.jpg" mos="" align="middle" fullscreen="" width="1154" height="649" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks / Android Headlines)</span></figcaption></figure><p>The Amazon listings reveal a bunch of Pixel 11 series specs, which line up with everything we've heard about the phones so far. That includes a 6.3-inch display rocking 1080x2424 resolution, 256GB of base storage, 12GB of RAM, 4,985 mAh battery and a price tag of $899. This suggests that Google isn't dropping the base level of RAM to 8GB, <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">as some rumors have suggested</a>, but the starting price will be rising by $100.</p><p>This is the same price as a 256GB Pixel 10, but since there's no entry level 128GB option, it means the cost of entry is higher. It's almost like Schrodinger's price hike, in which the price has simultaneously increased despite not actually changing for that particular model. </p><p>One thing to point out is that these listings reportedly say that the Pixel 11 will arrive with Android 16. Considering <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</a> has been released, and is widely available on Pixel phones, that seems very unlikely. To the point where it casts doubt on the rest of the information that was presented. </p><p>In other words, don't take this leak as gospel, and remain skeptical right up until the point Google tells us what's actually going on on August 12.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O92KMX"></div>                            </div>                            <script src="https://kwizly.com/embed/O92KMX.js" async></script><p>The cost of the other models hasn't been mentioned, but we should expect that the Pixel 11 Pro should get a similar price bump as Google kills the 128GB option. Since the XL and Fold already start at 256GB, their U.S. pricing remains unclear, but if <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-release-date-and-prices-leak-as-official-august-12-pixel-event-invites-go-out">leaked EU prices are anything to go</a> by we should expect an additional $100 per phone.</p><p>The Pixel 11 Pro listing also mentions 12GB of RAM, which is a downgrade, alongside a 5,115 mAh battery for the Pixel 11 Pro XL and 4,750 mAh for the Pixel 11 Pro Fold. Those are <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">slightly higher capacities than the rumors have suggested</a>, but it is still a small downgrade from the equivalent <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a>. Apart from the Pixel 11, which is listed with 5 mAh more than the Pixel 10.</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/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">I've seen the Galaxy Z Fold 8's crease-free 'Flex Titanium' display — and Apple should be nervous</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/every-samsung-device-from-this-months-unpacked-just-leaked-heres-your-full-look-at-the-entire-lineup">Every Samsung device from this month's Unpacked just leaked — here's your full look at the entire lineup</a></li><li><a href="https://www.tomsguide.com/phones/i-just-saw-the-future-of-phones-inside-samsung-display-with-2-jaw-dropping-slidable-concepts">I just saw the future of phones inside Samsung Display with 2 jaw-dropping ‘slidable’ concepts</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tested Google's new Gemini update for Android Auto and it finally fixes everything that made the old Google Assistant so frustrating to use while driving ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Last year <a href="https://www.tomsguide.com/ai/google-gemini/android-auto-just-got-a-massive-free-upgrade-with-gemini-heres-all-the-new-features">Google announced that it was getting rid of Google Assistant in cars</a>, and would replace all voice-centric features with the newer, and more advanced, Gemini AI instead. I was thrilled about this news at the time, since my experience with Google Assistant while driving was far from great. </p><p>Over a year after that news was first announced, Google finally decided it was time to add Gemini in my car — and completely remove Google Assistant from my life. <a href="https://www.tomsguide.com/ai/google-gemini/gemini-in-the-car-is-long-overdue-and-i-cant-wait-to-try-it-in-android-auto-soon">Given my absolute disdain for Assistant</a> and what it could do, I jumped at the chance to go out and see what it was like to use Gemini out on the open road.</p><h2 id="how-gemini-works-with-android-auto">How Gemini works with Android Auto</h2><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="d6iRrNAQeYiESHsFCyjoUK" name="shutterstock_2604883871-2" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/d6iRrNAQeYiESHsFCyjoUK.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: Shutterstock)</span></figcaption></figure><p>I should mention that my car is about as dumb as you can get these days. It's an electric <a href="https://www.tomsguide.com/reviews/2022-nissan-leaf">Nissan Leaf</a> with an infotainment system that supports both Android Auto and CarPlay, but there's no interaction between infotainment and the functionality of the car itself. This isn't a fancy car that routes everything through a touchscreen menu, and everything you do relies on physical buttons or levers. </p><p>In my case, though, these things are all locked into my phone, and have no actual connection to the car. This means Gemini also has no access to any of that information, or control over car systems. </p><p>I should make it very clear that I am grateful about this. Sticking essential car features behind a touchscreen is one of the most bone-headed moves the car industry has ever performed, and I'm glad to see that things are starting to go back to the way they were. Still, I am not a luddite and fully expect to be able to use some hi-tech features in my car, like navigation, phone calls, streaming and so on — so long as it's safe to do so. </p><p>In theory, voice assistants are a safety tool since they let you control those sorts of features without having to look at, or interact with a touchscreen. Old assistants like Google Assistant were fairly limited, and that meant you had to be fairly precise with what you asked for. Similarly, my Assistant seemed to be quite fond of ignoring me, or refusing to understand what I said. </p><p>That led to me virtually shouting at my car to do something simple, because the assistant software was about as robust as a paper towel at the bottom of the Mariana Trench.</p><p>Gemini works in much the same way as Assistant did. You can either summon the AI by saying "Hey Google," or by using your car's dedicated voice command button — assuming it has one, that is. Mine does, and probably gets more use than 99% of the buttons on my steering wheel.</p><p>And, just like Gemini on your phone or in your <a href="https://www.tomsguide.com/audio/smart-speakers/google-home-speaker-review">Google Home smart speaker</a>, all you need to do is ask Gemini for whatever it is you want. </p><h2 id="gemini-outmatches-assistant-in-every-way">Gemini outmatches Assistant in every 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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="j6NW6HvPruoW3WCU45kNR4" name="Google Maps Immersive Navigation in Android Auto.GIF" alt="Google Maps Immersive Navigation in Android Auto." src="https://cdn.mos.cms.futurecdn.net/j6NW6HvPruoW3WCU45kNR4.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>At first, I wasn't all that impressed with what Gemini could actually offer me, because I kept thinking of it like Google Assistant. Since Google Assistant was a complete waste of storage space a lot of the time, I learned to only rely on it when absolutely necessary. I didn't really feel like having a shouting match just to get the darn thing to register that I'd said "yes."</p><p>I basically had to throw out all my expectations about what assistants can do in the car, and try to rely on Gemini for more than I used to be able to do. Thankfully it didn't take long to flick that proverbial switch, and I was quickly able to start asking Gemini about more detailed and complicated things. </p><p>Google Assistant was limited in what it could do and how it would understand your commands. Gemini, being powered by Google's LLM, has no such issues. I found myself able to ask long-winded questions with a bunch of technical details, and the AI was not only able to understand what I was saying, it could actually give me an answer.</p><p>At one point I asked how long it would take my car to charge to 100%, making sure to mention the size of the battery, how full the battery was and how fast I expected to be able to charge. Gemini was able to give me an answer, and gave me tips on charging protocol — warning me that charging past 80% slows the whole process down. I can't tell you whether Gemini's estimate of 6 hours was correct, but it's certainly in the right ballpark.</p><p>At the same time, Gemini was happy to answer questions about basic things that had no relation to the car. What time is the <a href="https://www.tomsguide.com/entertainment/streaming/toms-guide-to-the-world-cup">next England World Cup game</a>? I can't actually tell you because I couldn't care less and immediately forgot what Gemini told me, but Gemini was able to look it up while I was driving.</p><p>What I liked the most is that I could ask it about bits of data I knew Google had. What time does X business close today, and how busy is it expected to be right now? These are all things you can see on a business card in Google Maps or Search, and Gemini was able to pass that information along without issue. Even if it didn't have the right facts, such as when I asked how busy the local car wash would be, it pulled information from reviews about wait times and gave me those instead.</p><p>As for navigation, the use of real world language makes the whole thing a lot easier. I was able to ask for the fastest route to a specific location, and later tried to mix things up by asking to be put on the most energy-efficient route mid-drive. Not only was Google able to understand and facilitate that, it also warned me that I was already on the most efficient route — and that it can't do much more than that.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XkwlzX"></div>                            </div>                            <script src="https://kwizly.com/embed/XkwlzX.js" async></script><h2 id="gemini-for-android-auto-does-need-some-work">Gemini for Android Auto does need some work</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZmRnFZ8r5azTcaFHWDGB2D" name="Android Auto" alt="Android Auto" src="https://cdn.mos.cms.futurecdn.net/ZmRnFZ8r5azTcaFHWDGB2D.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>That said, Gemini is not perfect. There are situations where it had no idea what I was talking about, and just shut down. A good example was asking where I could find a <a href="https://www.tomsguide.com/reference/ev-charging-explained-heres-all-the-different-charger-types">CHAdeMO charger</a> for my car, only for Google to completely fail to understand the word in question. But when I mixed my language up, and asked for an "ultra fast charger compatible with the Nissan Leaf" it was able to show me a bunch of nearby locations within a couple of seconds. </p><p>It turns out that because Gemini didn't understand the word CHAdeMO, it just spelled the word out letter by letter. The same thing happened to the charging brand GRIDSERVE, and I can only assume it's because the name is all uppercase. Apparently the lack of lowercase letters confused the AI, and meant it couldn't understand my human method of reading out the whole word.</p><p>There can be a bit of a delay while it processes the question, though this is true of most AI chatbots. If it can't process what you need on the device, it's going to have to talk to a server somewhere and that obviously means there's going to be delays while information is transmitted back and forth. </p><p>However, I have yet to experience Gemini just straight-up not registering that I have spoken to it, which was a near-daily occurrence with Google Assistant. So, regardless of its iffy understanding of certain brand names and proper nouns, Gemini is definitely on the winning team.</p><h2 id="bottom-line-4">Bottom line</h2><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="5Pa8bdDWXoYokNgNheSzyc" name="Gemini vs ChatGPT edit.shutterstock_2423206301" alt="Gemini and ChatGPT logos on a phone" src="https://cdn.mos.cms.futurecdn.net/5Pa8bdDWXoYokNgNheSzyc.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>I still need to spend some more time with Gemini in my car to get to grips with everything else the AI has to offer in my car. For the most part, though, I'm fairly impressed, especially since the AI is able to work across different Android Auto apps based on the kind of questions and commands it receives. It's a night and day upgrade compared to Google Assistant, which was usually more trouble than it's worth.</p><p>It's an upgrade that seems to do what was originally promised. Not only does it offer all the things Google Assistant could accomplish, it's able to provide more information and understanding to the driver. Considering driving is inherently dangerous, and you should not allow anything to distract you, the fact that an AI assistant can handle more of the things that might cause your concentration to lapse can only be a good thing. </p><p>Let's just hope that Gemini's uppercase reading comprehension improves a lot over the coming months and years.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/7-ai-mistakes-i-see-people-over-50-make-again-and-again-heres-how-to-fix-every-one">7 AI mistakes I see people over 50 make again and again — here's how to fix every one</a></li><li><a href="https://www.tomsguide.com/phones/iphones/3-siri-ai-features-youll-use-every-day">I tried the new Siri AI features: here's 3 you'll actually want to use every day</a></li><li><a href="https://www.tomsguide.com/computing/why-google-maps-keeps-sending-you-the-long-way-and-how-to-stop-it">Google Maps actually defaults to the slowest route now — here's how to fix it</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/i-just-got-gemini-for-android-auto-in-my-car-and-i-cant-believe-how-much-better-it-is-than-google-assistant</link>
                                                                            <description>
                            <![CDATA[ Google Assistant was the bane of my driving experience, but Gemini is already making up for all those past wrongs. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CAAemQ6JALmq8xhvdkoJBX</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VJH64ZqNMaD4LMfniT6ayC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 11 Jul 2026 04:45:00 +0000</pubDate>                                                                                                                                <updated>Sat, 11 Jul 2026 21:25:06 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Google Gemini]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                    <category><![CDATA[AI]]></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/VJH64ZqNMaD4LMfniT6ayC-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Android Auto]]></media:description>                                                            <media:text><![CDATA[Android Auto]]></media:text>
                                <media:title type="plain"><![CDATA[Android Auto]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VJH64ZqNMaD4LMfniT6ayC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Last year <a href="https://www.tomsguide.com/ai/google-gemini/android-auto-just-got-a-massive-free-upgrade-with-gemini-heres-all-the-new-features">Google announced that it was getting rid of Google Assistant in cars</a>, and would replace all voice-centric features with the newer, and more advanced, Gemini AI instead. I was thrilled about this news at the time, since my experience with Google Assistant while driving was far from great. </p><p>Over a year after that news was first announced, Google finally decided it was time to add Gemini in my car — and completely remove Google Assistant from my life. <a href="https://www.tomsguide.com/ai/google-gemini/gemini-in-the-car-is-long-overdue-and-i-cant-wait-to-try-it-in-android-auto-soon">Given my absolute disdain for Assistant</a> and what it could do, I jumped at the chance to go out and see what it was like to use Gemini out on the open road.</p><h2 id="how-gemini-works-with-android-auto">How Gemini works with Android Auto</h2><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="d6iRrNAQeYiESHsFCyjoUK" name="shutterstock_2604883871-2" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/d6iRrNAQeYiESHsFCyjoUK.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: Shutterstock)</span></figcaption></figure><p>I should mention that my car is about as dumb as you can get these days. It's an electric <a href="https://www.tomsguide.com/reviews/2022-nissan-leaf">Nissan Leaf</a> with an infotainment system that supports both Android Auto and CarPlay, but there's no interaction between infotainment and the functionality of the car itself. This isn't a fancy car that routes everything through a touchscreen menu, and everything you do relies on physical buttons or levers. </p><p>In my case, though, these things are all locked into my phone, and have no actual connection to the car. This means Gemini also has no access to any of that information, or control over car systems. </p><p>I should make it very clear that I am grateful about this. Sticking essential car features behind a touchscreen is one of the most bone-headed moves the car industry has ever performed, and I'm glad to see that things are starting to go back to the way they were. Still, I am not a luddite and fully expect to be able to use some hi-tech features in my car, like navigation, phone calls, streaming and so on — so long as it's safe to do so. </p><p>In theory, voice assistants are a safety tool since they let you control those sorts of features without having to look at, or interact with a touchscreen. Old assistants like Google Assistant were fairly limited, and that meant you had to be fairly precise with what you asked for. Similarly, my Assistant seemed to be quite fond of ignoring me, or refusing to understand what I said. </p><p>That led to me virtually shouting at my car to do something simple, because the assistant software was about as robust as a paper towel at the bottom of the Mariana Trench.</p><p>Gemini works in much the same way as Assistant did. You can either summon the AI by saying "Hey Google," or by using your car's dedicated voice command button — assuming it has one, that is. Mine does, and probably gets more use than 99% of the buttons on my steering wheel.</p><p>And, just like Gemini on your phone or in your <a href="https://www.tomsguide.com/audio/smart-speakers/google-home-speaker-review">Google Home smart speaker</a>, all you need to do is ask Gemini for whatever it is you want. </p><h2 id="gemini-outmatches-assistant-in-every-way">Gemini outmatches Assistant in every 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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="j6NW6HvPruoW3WCU45kNR4" name="Google Maps Immersive Navigation in Android Auto.GIF" alt="Google Maps Immersive Navigation in Android Auto." src="https://cdn.mos.cms.futurecdn.net/j6NW6HvPruoW3WCU45kNR4.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>At first, I wasn't all that impressed with what Gemini could actually offer me, because I kept thinking of it like Google Assistant. Since Google Assistant was a complete waste of storage space a lot of the time, I learned to only rely on it when absolutely necessary. I didn't really feel like having a shouting match just to get the darn thing to register that I'd said "yes."</p><p>I basically had to throw out all my expectations about what assistants can do in the car, and try to rely on Gemini for more than I used to be able to do. Thankfully it didn't take long to flick that proverbial switch, and I was quickly able to start asking Gemini about more detailed and complicated things. </p><p>Google Assistant was limited in what it could do and how it would understand your commands. Gemini, being powered by Google's LLM, has no such issues. I found myself able to ask long-winded questions with a bunch of technical details, and the AI was not only able to understand what I was saying, it could actually give me an answer.</p><p>At one point I asked how long it would take my car to charge to 100%, making sure to mention the size of the battery, how full the battery was and how fast I expected to be able to charge. Gemini was able to give me an answer, and gave me tips on charging protocol — warning me that charging past 80% slows the whole process down. I can't tell you whether Gemini's estimate of 6 hours was correct, but it's certainly in the right ballpark.</p><p>At the same time, Gemini was happy to answer questions about basic things that had no relation to the car. What time is the <a href="https://www.tomsguide.com/entertainment/streaming/toms-guide-to-the-world-cup">next England World Cup game</a>? I can't actually tell you because I couldn't care less and immediately forgot what Gemini told me, but Gemini was able to look it up while I was driving.</p><p>What I liked the most is that I could ask it about bits of data I knew Google had. What time does X business close today, and how busy is it expected to be right now? These are all things you can see on a business card in Google Maps or Search, and Gemini was able to pass that information along without issue. Even if it didn't have the right facts, such as when I asked how busy the local car wash would be, it pulled information from reviews about wait times and gave me those instead.</p><p>As for navigation, the use of real world language makes the whole thing a lot easier. I was able to ask for the fastest route to a specific location, and later tried to mix things up by asking to be put on the most energy-efficient route mid-drive. Not only was Google able to understand and facilitate that, it also warned me that I was already on the most efficient route — and that it can't do much more than that.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XkwlzX"></div>                            </div>                            <script src="https://kwizly.com/embed/XkwlzX.js" async></script><h2 id="gemini-for-android-auto-does-need-some-work">Gemini for Android Auto does need some work</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZmRnFZ8r5azTcaFHWDGB2D" name="Android Auto" alt="Android Auto" src="https://cdn.mos.cms.futurecdn.net/ZmRnFZ8r5azTcaFHWDGB2D.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>That said, Gemini is not perfect. There are situations where it had no idea what I was talking about, and just shut down. A good example was asking where I could find a <a href="https://www.tomsguide.com/reference/ev-charging-explained-heres-all-the-different-charger-types">CHAdeMO charger</a> for my car, only for Google to completely fail to understand the word in question. But when I mixed my language up, and asked for an "ultra fast charger compatible with the Nissan Leaf" it was able to show me a bunch of nearby locations within a couple of seconds. </p><p>It turns out that because Gemini didn't understand the word CHAdeMO, it just spelled the word out letter by letter. The same thing happened to the charging brand GRIDSERVE, and I can only assume it's because the name is all uppercase. Apparently the lack of lowercase letters confused the AI, and meant it couldn't understand my human method of reading out the whole word.</p><p>There can be a bit of a delay while it processes the question, though this is true of most AI chatbots. If it can't process what you need on the device, it's going to have to talk to a server somewhere and that obviously means there's going to be delays while information is transmitted back and forth. </p><p>However, I have yet to experience Gemini just straight-up not registering that I have spoken to it, which was a near-daily occurrence with Google Assistant. So, regardless of its iffy understanding of certain brand names and proper nouns, Gemini is definitely on the winning team.</p><h2 id="bottom-line-4">Bottom line</h2><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="5Pa8bdDWXoYokNgNheSzyc" name="Gemini vs ChatGPT edit.shutterstock_2423206301" alt="Gemini and ChatGPT logos on a phone" src="https://cdn.mos.cms.futurecdn.net/5Pa8bdDWXoYokNgNheSzyc.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>I still need to spend some more time with Gemini in my car to get to grips with everything else the AI has to offer in my car. For the most part, though, I'm fairly impressed, especially since the AI is able to work across different Android Auto apps based on the kind of questions and commands it receives. It's a night and day upgrade compared to Google Assistant, which was usually more trouble than it's worth.</p><p>It's an upgrade that seems to do what was originally promised. Not only does it offer all the things Google Assistant could accomplish, it's able to provide more information and understanding to the driver. Considering driving is inherently dangerous, and you should not allow anything to distract you, the fact that an AI assistant can handle more of the things that might cause your concentration to lapse can only be a good thing. </p><p>Let's just hope that Gemini's uppercase reading comprehension improves a lot over the coming months and years.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/7-ai-mistakes-i-see-people-over-50-make-again-and-again-heres-how-to-fix-every-one">7 AI mistakes I see people over 50 make again and again — here's how to fix every one</a></li><li><a href="https://www.tomsguide.com/phones/iphones/3-siri-ai-features-youll-use-every-day">I tried the new Siri AI features: here's 3 you'll actually want to use every day</a></li><li><a href="https://www.tomsguide.com/computing/why-google-maps-keeps-sending-you-the-long-way-and-how-to-stop-it">Google Maps actually defaults to the slowest route now — here's how to fix it</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 release date and prices leak as official August 12 Pixel event invites go out ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Compared to the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-everything-you-need-to-know-about-the-new-wider-foldable">Samsung Galaxy Z Fold 8</a> foldables and whatever Apple is doing with its<a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-vs-iphone-18-pro-max-five-biggest-expected-differences"> iPhone 18 Pro </a>models, Google's Pixel series has had a relatively quiet summer. However, that just changed with two different leaks that revealed the release date and a potential price hike for the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Google Pixel 11</a> lineup.</p><p>First up, Bloomberg's Mark Gurman, who normally focuses on all things Apple, <a href="https://x.com/markgurman/status/2074531443795984714" target="_blank">posted on X</a> an image of an invitation to a Pixel event in August.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2074531443795984714"><p lang="en" dir="ltr">Google Pixel event - August 12 pic.twitter.com/Veo1RCJN7j<a href="https://twitter.com/cantworkitout/status/2074531443795984714">July 7, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Based on the image, Google is planning to introduce "the next generation of Pixel" in New York City on August 12 starting at 6 PM ET, a surprisingly late in the day launch.</p><p>The image shows what looks like two phones in semi-shadow with a hint of a bronze or gold color, which hints at a potential hue for Pixel 11.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OdRGoe"></div>                            </div>                            <script src="https://kwizly.com/embed/OdRGoe.js" async></script><p>Tom's Guide will be at the event so keep us in your tabs as we cover everything Google announces on August 12.</p><p>No word on if Jimmy Fallon will host again.</p><h2 id="price-hike-and-a-dropped-storage-size">Price hike and a dropped storage size</h2><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="eE8yFNLAbzXX3wcHvn6tW4" name="Pixel-10-Pro-08" alt="Google Pixel 10 pro moonstone review images" src="https://cdn.mos.cms.futurecdn.net/eE8yFNLAbzXX3wcHvn6tW4.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The second leak comes from the <a href="https://www.dealabs.com/magazine/google-pixel-11-on-vous-devoile-les-prix-et-la-date-de-sortie-en-exclusivite-61540" target="_blank">French site Dealabs</a><a href="https://www.dealabs.com/magazine/google-pixel-11-on-vous-devoile-les-prix-et-la-date-de-sortie-en-exclusivite-61540" target="_blank">, </a>which regularly seems to dig up pricing news for the EU. The publication reports that the Pixel 11 is getting a price hike, sort of. </p><p>The increase is coming in the form of a storage tier change. Google may finally be dropping the 128GB storage option instead offering the 256GB tier as the base version with 512GB and 1TB as larger variants.</p><p>That does mean the base model is now more expensive. It seems, at least in the E.U., prices are also going up by €100 for every model, though.</p><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Pixel 11</p></th><th  ><p>Pixel 11 Pro</p></th><th  ><p>Pixel 11 Pro XL</p></th><th  ><p>Pixel 11 Pro Fold</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>256GB</strong></p></td><td  ><p>€999/£879</p></td><td  ><p>€1,199/£1,079</p></td><td  ><p>€1,399/£1,279</p></td><td  ><p>€1,999/£1,799</p></td></tr><tr><td class="firstcol " ><p><strong>512GB</strong></p></td><td  ><p>€1,129/£999</p></td><td  ><p>€1,329/£1,199</p></td><td  ><p>€1,529/£1,399</p></td><td  ><p>€2,129/£1,919</p></td></tr><tr><td class="firstcol " ><p><strong>1TB</strong></p></td><td  ><p>N/A</p></td><td  ><p>€1,589/£1,429</p></td><td  ><p>€1,789/£1,629</p></td><td  ><p>€2,389/£2,149</p></td></tr></tbody></table></div><p>E.U. costs don't directly translate to U.S. pricing, but it's more than likely we can expect some kind of increase in America, especially if the 128GB version is being dropped.</p><p>For comparison, last year the Pixel 10 started at $799, $899 for the Pro, and $1,199 for the Pro XL. The Pixel 10 Pro Fold started at $1,799. A similar hike would jump them to $899, $999, $,12,99 and $1,899.</p><p>The report also revealed colorways for every Pixel 11 phone:</p><ul><li><strong>Pixel 11:</strong> Light Sterling, Midnight Haze, Fuchsia, Moss</li><li><strong>Pixel 11 Pro:</strong> Light Fog, Midnight Haze, Dune, Pine</li><li><strong>Pixel 11 Pro XL:</strong> Light Fog, Midnight Haze, Dune, Pine</li><li><strong>Pixel 11 Pro Fold:</strong> Midnight Haze, Pine</li></ul><p>Dealabs also claimed that Pixel 11 would release on August 20  with a potential August 11 announcement date. Which does track with Gurman's August 12 event.</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/phones-need-to-focus-less-on-ai-and-more-on-what-makes-hardware-actually-great-heres-why">Phones need to focus less on AI, and more on what makes hardware actually great — here's why</a></li><li><a href="https://www.tomsguide.com/phones/android-phones/this-hidden-android-feature-gives-you-quick-and-simple-access-to-a-bunch-of-core-settings-heres-how-it-works">This hidden Android feature gives you quick and simple access to a bunch of core settings — here's how it works</a></li><li><a href="https://www.tomsguide.com/computing/google-wants-to-train-its-ai-on-your-search-history-you-dont-have-to-let-it">Google wants to train its AI on your search history. Here's how to opt out now</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-release-date-and-prices-leak-as-official-august-12-pixel-event-invites-go-out</link>
                                                                            <description>
                            <![CDATA[ Two new leaks reveal a Pixel 11 price hike and Google's next phones event. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DKvkMprTyFcYn2utFzRdRS</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QBuLV7goRtYZ78vKnxmd2h-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 07 Jul 2026 18:45:00 +0000</pubDate>                                                                                                                                <updated>Tue, 07 Jul 2026 18:45:08 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/QBuLV7goRtYZ78vKnxmd2h-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Pixel 10 lineup.]]></media:description>                                                            <media:text><![CDATA[Pixel 10 lineup.]]></media:text>
                                <media:title type="plain"><![CDATA[Pixel 10 lineup.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QBuLV7goRtYZ78vKnxmd2h-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Compared to the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-everything-you-need-to-know-about-the-new-wider-foldable">Samsung Galaxy Z Fold 8</a> foldables and whatever Apple is doing with its<a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-vs-iphone-18-pro-max-five-biggest-expected-differences"> iPhone 18 Pro </a>models, Google's Pixel series has had a relatively quiet summer. However, that just changed with two different leaks that revealed the release date and a potential price hike for the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Google Pixel 11</a> lineup.</p><p>First up, Bloomberg's Mark Gurman, who normally focuses on all things Apple, <a href="https://x.com/markgurman/status/2074531443795984714" target="_blank">posted on X</a> an image of an invitation to a Pixel event in August.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2074531443795984714"><p lang="en" dir="ltr">Google Pixel event - August 12 pic.twitter.com/Veo1RCJN7j<a href="https://twitter.com/cantworkitout/status/2074531443795984714">July 7, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Based on the image, Google is planning to introduce "the next generation of Pixel" in New York City on August 12 starting at 6 PM ET, a surprisingly late in the day launch.</p><p>The image shows what looks like two phones in semi-shadow with a hint of a bronze or gold color, which hints at a potential hue for Pixel 11.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OdRGoe"></div>                            </div>                            <script src="https://kwizly.com/embed/OdRGoe.js" async></script><p>Tom's Guide will be at the event so keep us in your tabs as we cover everything Google announces on August 12.</p><p>No word on if Jimmy Fallon will host again.</p><h2 id="price-hike-and-a-dropped-storage-size">Price hike and a dropped storage size</h2><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="eE8yFNLAbzXX3wcHvn6tW4" name="Pixel-10-Pro-08" alt="Google Pixel 10 pro moonstone review images" src="https://cdn.mos.cms.futurecdn.net/eE8yFNLAbzXX3wcHvn6tW4.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The second leak comes from the <a href="https://www.dealabs.com/magazine/google-pixel-11-on-vous-devoile-les-prix-et-la-date-de-sortie-en-exclusivite-61540" target="_blank">French site Dealabs</a><a href="https://www.dealabs.com/magazine/google-pixel-11-on-vous-devoile-les-prix-et-la-date-de-sortie-en-exclusivite-61540" target="_blank">, </a>which regularly seems to dig up pricing news for the EU. The publication reports that the Pixel 11 is getting a price hike, sort of. </p><p>The increase is coming in the form of a storage tier change. Google may finally be dropping the 128GB storage option instead offering the 256GB tier as the base version with 512GB and 1TB as larger variants.</p><p>That does mean the base model is now more expensive. It seems, at least in the E.U., prices are also going up by €100 for every model, though.</p><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Pixel 11</p></th><th  ><p>Pixel 11 Pro</p></th><th  ><p>Pixel 11 Pro XL</p></th><th  ><p>Pixel 11 Pro Fold</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>256GB</strong></p></td><td  ><p>€999/£879</p></td><td  ><p>€1,199/£1,079</p></td><td  ><p>€1,399/£1,279</p></td><td  ><p>€1,999/£1,799</p></td></tr><tr><td class="firstcol " ><p><strong>512GB</strong></p></td><td  ><p>€1,129/£999</p></td><td  ><p>€1,329/£1,199</p></td><td  ><p>€1,529/£1,399</p></td><td  ><p>€2,129/£1,919</p></td></tr><tr><td class="firstcol " ><p><strong>1TB</strong></p></td><td  ><p>N/A</p></td><td  ><p>€1,589/£1,429</p></td><td  ><p>€1,789/£1,629</p></td><td  ><p>€2,389/£2,149</p></td></tr></tbody></table></div><p>E.U. costs don't directly translate to U.S. pricing, but it's more than likely we can expect some kind of increase in America, especially if the 128GB version is being dropped.</p><p>For comparison, last year the Pixel 10 started at $799, $899 for the Pro, and $1,199 for the Pro XL. The Pixel 10 Pro Fold started at $1,799. A similar hike would jump them to $899, $999, $,12,99 and $1,899.</p><p>The report also revealed colorways for every Pixel 11 phone:</p><ul><li><strong>Pixel 11:</strong> Light Sterling, Midnight Haze, Fuchsia, Moss</li><li><strong>Pixel 11 Pro:</strong> Light Fog, Midnight Haze, Dune, Pine</li><li><strong>Pixel 11 Pro XL:</strong> Light Fog, Midnight Haze, Dune, Pine</li><li><strong>Pixel 11 Pro Fold:</strong> Midnight Haze, Pine</li></ul><p>Dealabs also claimed that Pixel 11 would release on August 20  with a potential August 11 announcement date. Which does track with Gurman's August 12 event.</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/phones-need-to-focus-less-on-ai-and-more-on-what-makes-hardware-actually-great-heres-why">Phones need to focus less on AI, and more on what makes hardware actually great — here's why</a></li><li><a href="https://www.tomsguide.com/phones/android-phones/this-hidden-android-feature-gives-you-quick-and-simple-access-to-a-bunch-of-core-settings-heres-how-it-works">This hidden Android feature gives you quick and simple access to a bunch of core settings — here's how it works</a></li><li><a href="https://www.tomsguide.com/computing/google-wants-to-train-its-ai-on-your-search-history-you-dont-have-to-let-it">Google wants to train its AI on your search history. Here's how to opt out now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Who will be king of the Android foldables? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>There may be a lot of attention on 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 Ultra</a>, since it's Apple's first foldable phone, but it's far from the only folding phone that's set to arrive this year. Two Android titans, Samsung and Google, are set to release a new generation of foldables in the form of the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-8-how-samsungs-next-foldable-could-square-up-with-the-iphone-fold">Samsung Galaxy Z Fold 8 Ultra</a> and the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro Fold</a>. </p><p>Google and Samsung have plenty of experience when it comes to foldables, and they're both powered by some of the most popular flavors of Android available right now. The question is, which new foldable is going to be the better purchase? We don't know everything about the Z Fold 8 Ultra or Pixel 11 Pro Fold just yet, but there have been enough rumors and leaks to give us an idea of what tyo expect.</p><p>Here's a rundown of the Samsung Galaxy Z Fold 8 Ultra vs the Google Pixel 11 Pro Fold battle so far.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-specs"><span>Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11 Pro Fold (rumored)</strong></p></td><td  ><p><strong>Samsung Galaxy Z Fold 8 (rumored)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>6.4-inch OLED (120Hz)</p></td><td  ><p>6.5-inch OLED (120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong></p></td><td  ><p>8-inch OLED (120Hz)</p></td><td  ><p>8-inch OLED (120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6 (2nm)</p></td><td  ><p>Qualcomm Snapdragon 8 Elite Gen 5 for Galaxy (3nm)</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB or 16GB</p></td><td  ><p>12GB or 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB, 1TB</p></td><td  ><p>256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,658mAh</p></td><td  ><p>~5,000mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP main, 10.5MP ultrawide, 10.8MP 5x telephoto </p></td><td  ><p>200MP main, 50MP ultrawide, 12MP 3x telephoto</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>10MP selfie (cover and main)</p></td><td  ><p>10MP selfie (cover and main)</p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$1,799</p></td><td  ><p>$1,999</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-release-date-price"><span>Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Release date & price</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6kLR5TcVmSPDqEd7kcDncQ" name="Samsung Galaxy Z Fold 8 leaked render" alt="Samsung Galaxy Z Fold 8 leaked render" src="https://cdn.mos.cms.futurecdn.net/6kLR5TcVmSPDqEd7kcDncQ.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: Android Headlines)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 8 Ultra is rumored to be unveiled at Galaxy Unpacked on July 22, alongside the<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-vs-galaxy-z-fold-wide-biggest-expected-differences"> Galaxy Z Fold 8</a> (Fold Wide) and the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-everything-we-know-so-far">Galaxy Z Flip 8</a>. A release date hasn't been confirmed yet, but it's likely that the phone will go on general sale around two weeks later in early August — after a brief pre-order window.</p><p>Pricing isn't clear right now, and considering the situation with <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a> and the skyrocketing cost of memory and storage, it's likely that we'll see some kind of price hike. So expect to have to pay more than the $1,999 starting price of <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a>.</p><p>The Pixel 11 Pro Fold is set to arrive later this year, likely towards the end of August alongside the rest of the Pixel 11 series. We don't have any kind of date yet, so we can only guess based on past experience. </p><p>Likewise, we have no idea how much the phone is set to cost, and whether we'll see a price hike compared to the $1,799 <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>. I wouldn't bet on there not being a price increase, especially if Google includes 16GB of RAM for another year.</p><h3 class="article-body__section" id="section-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-design-display"><span>Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Design & Display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1268px;"><p class="vanilla-image-block" style="padding-top:75.47%;"><img id="8MjYLKFR7VtNJZsP4Q6mXB" name="Screenshot 2026-03-10 104112" alt="onleaks android headlines pixel 11 pro fold renders" src="https://cdn.mos.cms.futurecdn.net/8MjYLKFR7VtNJZsP4Q6mXB.png" mos="" align="middle" fullscreen="" width="1268" height="957" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks/Android Headlines)</span></figcaption></figure><p>We're not expecting huge changes to the design of either phone this year, though the Z Fold 8 Ultra is rumored to be coming with a slightly <a href="https://www.tomsguide.com/phones/samsung-phones/first-look-samsung-galaxy-z-fold-8-renders-just-leaked-the-new-foldable-in-full">larger 8-inch foldable screen paired with a 6.5-inch cover display</a>. Both screens are expected to be OLED panels, complete with 120Hz refresh rates. However <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-may-eliminate-the-display-crease-too-step-aside-iphone-fold">the display may be creaseless</a>, or as close as Samsung can get.</p><p>All the big changes are happening to the Galaxy Z Fold 8, which was previously known as the Z Fold Wide. This new model will have a shorter and wider screen than the Ultra, with a similar look to what we expect Apple will offer with the iPhone Ultra.</p><p>The Pixel 11 Pro Fold is also expected to lose 0.1-inches off its cover display, but with no other meaningful change. Hopefully this is due to Google reducing the size of the phone and its bezels.</p><p>The 8-inch interior display is expected to stay the same size, though, and both will presumably offer an OLED panel with a 120Hz refresh rate. There's also rumored to be a Nothing-esque light effect on the back of the phone, known as "Pixel Glow."</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-cameras"><span>Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1383px;"><p class="vanilla-image-block" style="padding-top:56.04%;"><img id="3GEBFS67DHYiPEKSBDeuga" name="HG4LIfPasAAOryc" alt="galaxy z fold 8m, z flip 8 and fold wide dummy units" src="https://cdn.mos.cms.futurecdn.net/3GEBFS67DHYiPEKSBDeuga.jpg" mos="" align="middle" fullscreen="" width="1383" height="775" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sonny Dickson)</span></figcaption></figure><p>We're not expecting Samsung to do much with the Z Fold 8 Ultra's main camera, and will stick with the same 200MP lens that debuted on the Z Fold 7 last year. However, we are expecting to see the <a href="https://www.galaxyclub.nl/samsung/galaxy-z-fold-8/" target="_blank">ultrawide camera jump</a> from 12MP to 50MP, while the telephoto lens is tipped for a modest increase from 10MP to 12MP. The optical zoom will likely stay at 3x magnification though.</p><p>All we know about the Pixel 11 Pro Fold main camera is that it should have a slight resolution boost <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">from 48MP to 50MP</a>. Leaked specs haven't revealed what we can expect from the other cameras, but I certainly hope that we see a minor boost on the 10.5MP ultrawide camera at the very least. If Google wants its foldables to compete with Samsung and Apple, then it's going to need to up its game.</p><p>Thankfully, Google does have the computational photography experience to boost the quality of the pictures with AI. But that can only go so far, and since the Z Fold 7 already took excellent photos it's about time Google caught up with its foldable cameras.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-performance"><span>Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1266px;"><p class="vanilla-image-block" style="padding-top:75.12%;"><img id="kCYQ3pKY2zaKbfhjDTSdYB" name="Screenshot 2026-03-10 104103" alt="onleaks android headlines pixel 11 pro fold renders" src="https://cdn.mos.cms.futurecdn.net/kCYQ3pKY2zaKbfhjDTSdYB.png" mos="" align="middle" fullscreen="" width="1266" height="951" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks/Android Headlines)</span></figcaption></figure><p>On the performance side of things, it's clear that Samsung will be many steps ahead of Google. Pixel phones are not known for their speed, and since the Pixel 11 Pro Fold is likely to be running another <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Tensor chipset (the G6</a>), things aren't likely to change this year. </p><p>That said, Pixel phones typically have more base RAM than Galaxy phones, with the 10 Pro Fold offering 16GB to the Z Fold 7's 12GB. Higher levels of RAM are typically only available on the highest storage option, and that's likely to be the same situation this year — more so considering all the RAM shortages. The extra memory, along with the alleged AI-optimization of the Tensor chips, may give the Pixel 11 Pro Fold an edge in AI processes.</p><p>However, leaked specs suggest Google may take a leaf out of Samsung's book and <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">reduce the base amount of RAM</a> and keep 16GB exclusive to higher specc'd models. </p><p>When it comes to raw performance power, Samsung is likely to dominate. Z Folds typically have the flagship Snapdragon chipset, which this year would be the Snapdragon 8 Elite Gen 5. </p><p>On top of that, the Pixel 11 series is expected to downgrade the Tensor G6 from eight cores to seven, which will likely cause a noticeable drop in performance power. Likewise,<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades"> Google is said to be using a PowerVR CXTP-48-1536 GPU</a>, which is based on 2021 chip architecture. So you could see a performance hit for resource-intensive activities like gaming and video editing.</p><p>Don't expect to see the Exynos 2600 on the Z Fold, though. While Samsung has started using its own chips on the Z Flip series, and on Galaxy S phones in certain regions, Ultra series phones typically get the Snapdragon chip everywhere.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-battery-charging"><span>Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Battery & charging</span></h3><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="MUz7SRqUeezZBpFKKe2afQ" name="Galaxy Z Fold 8 case" alt="Galaxy Z Fold 8 case render" src="https://cdn.mos.cms.futurecdn.net/MUz7SRqUeezZBpFKKe2afQ.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: Android Headlines)</span></figcaption></figure><p>Rumors suggest that the Z Fold 8 Ultra could upgrade the battery by increasing the capacity from <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8s-latest-rumored-upgrade-could-show-samsungs-finally-listening">4,400 mAh to 5,000 mAh </a>— the same as the Galaxy S26 Ultra. Sadly, the Pixel 11 Pro Fold's leaked specs suggest that it will be doing the opposite, <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">dropping from 5,015 mAh to 4,658 mAh</a>.</p><p>While higher capacity doesn't necessarily mean longer battery, the fact that Samsung is offering more power reserves definitely works out in its favor. When you remember that Pixel phones haven't always had the best battery life in the past, a drop in capacity is rather worrying.</p><p>There's no word on how fast the 11 Pro Fold will charge, though we will likely see 15W Qi2 wireless charging make another appearance. The Z Fold 8 Ultra is rumored to be <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-tipped-for-a-major-charging-upgrade-iphone-fold-should-take-notes">upgraded to 45W charging </a>which, while not as impressive as the S26 Ultra's 60W is still a noticeable improvement from the 25W on past phones.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-outlook"><span>Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1607px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iWjN5TBTWe8mz96yhig3Ad" name="Screenshot 2026-03-10 104108" alt="google pixel 11 pro fold leaked cad renders" src="https://cdn.mos.cms.futurecdn.net/iWjN5TBTWe8mz96yhig3Ad.png" mos="" align="middle" fullscreen="" width="1607" height="904" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Onleaks/Android Headlines)</span></figcaption></figure><p>Based on the rumors and leaks so far, it doesn't seem like there are a lot of major changes happening to the Galaxy Z Fold 8 Ultra and Pixel 11 Pro Fold. Certainly nothing that upsets the status quo in any meaningful way. </p><p>Samsung should have an edge on camera hardware, performance and battery life, and the crease-free display sounds promising. And Google should offer a Pixel experience in foldable form once more — which includes a lot of AI, early access to updates and some exclusive features.</p><p>It certainly seems as though Samsung has the upper hand, and while that may eventually be the case it doesn't change the fact that the Z Fold lineup is rather expensive. In fact, with everything going on, I would be shocked if there wasn't another price hike this year as well. So the Pixel 11 Pro Fold could have the value advantage.</p><p>But with Galaxy Unpacked coming in fast, and Google's own launch event likely following roughly a month later, it shouldn't be long before we can test these phones and make a proper conclusion for ourselves.</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/easily-the-biggest-leak-in-apples-history-iphone-18-pro-final-design-may-have-just-been-revealed-in-a-stolen-drop-test-video">'Easily the biggest leak in Apple's history': iPhone 18 Pro final design may have just been revealed in a stolen drop test video</a></li><li><a href="https://www.tomsguide.com/phones/your-location-data-is-now-officially-protected-by-the-fourth-amendment-heres-what-that-means-for-you">Your location data is now officially protected by the fourth amendment — here's what that means for you</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/major-samsung-galaxy-z-fold-8-leak-shows-off-the-unreleased-foldables-and-cases-heres-what-you-need-to-know">Samsung Galaxy Z Fold 8, Z Fold 8 Ultra and Z Flip 8 Ultra just leaked ahead of Unpacked</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-who-will-be-king-of-the-android-foldables</link>
                                                                            <description>
                            <![CDATA[ Two big-name Android foldables are coming in the next few months, but which will be the best? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6mKUhF4VGzLb8tW6esCRCF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/HYBXoRfcycWdzq2Qt3Szj8-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Jul 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/HYBXoRfcycWdzq2Qt3Szj8-1280-80.jpg">
                                                            <media:credit><![CDATA[Android Headline / OnLeaks]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[google pixel 11 pro fold (right) vs samsung galaxy z fold 8 (left)]]></media:description>                                                            <media:text><![CDATA[google pixel 11 pro fold (right) vs samsung galaxy z fold 8 (left)]]></media:text>
                                <media:title type="plain"><![CDATA[google pixel 11 pro fold (right) vs samsung galaxy z fold 8 (left)]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/HYBXoRfcycWdzq2Qt3Szj8-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There may be a lot of attention on 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 Ultra</a>, since it's Apple's first foldable phone, but it's far from the only folding phone that's set to arrive this year. Two Android titans, Samsung and Google, are set to release a new generation of foldables in the form of the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-8-how-samsungs-next-foldable-could-square-up-with-the-iphone-fold">Samsung Galaxy Z Fold 8 Ultra</a> and the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro Fold</a>. </p><p>Google and Samsung have plenty of experience when it comes to foldables, and they're both powered by some of the most popular flavors of Android available right now. The question is, which new foldable is going to be the better purchase? We don't know everything about the Z Fold 8 Ultra or Pixel 11 Pro Fold just yet, but there have been enough rumors and leaks to give us an idea of what tyo expect.</p><p>Here's a rundown of the Samsung Galaxy Z Fold 8 Ultra vs the Google Pixel 11 Pro Fold battle so far.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-specs"><span>Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11 Pro Fold (rumored)</strong></p></td><td  ><p><strong>Samsung Galaxy Z Fold 8 (rumored)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>6.4-inch OLED (120Hz)</p></td><td  ><p>6.5-inch OLED (120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong></p></td><td  ><p>8-inch OLED (120Hz)</p></td><td  ><p>8-inch OLED (120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6 (2nm)</p></td><td  ><p>Qualcomm Snapdragon 8 Elite Gen 5 for Galaxy (3nm)</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB or 16GB</p></td><td  ><p>12GB or 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB, 1TB</p></td><td  ><p>256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,658mAh</p></td><td  ><p>~5,000mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP main, 10.5MP ultrawide, 10.8MP 5x telephoto </p></td><td  ><p>200MP main, 50MP ultrawide, 12MP 3x telephoto</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>10MP selfie (cover and main)</p></td><td  ><p>10MP selfie (cover and main)</p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$1,799</p></td><td  ><p>$1,999</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-release-date-price"><span>Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Release date & price</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6kLR5TcVmSPDqEd7kcDncQ" name="Samsung Galaxy Z Fold 8 leaked render" alt="Samsung Galaxy Z Fold 8 leaked render" src="https://cdn.mos.cms.futurecdn.net/6kLR5TcVmSPDqEd7kcDncQ.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: Android Headlines)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 8 Ultra is rumored to be unveiled at Galaxy Unpacked on July 22, alongside the<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-vs-galaxy-z-fold-wide-biggest-expected-differences"> Galaxy Z Fold 8</a> (Fold Wide) and the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-everything-we-know-so-far">Galaxy Z Flip 8</a>. A release date hasn't been confirmed yet, but it's likely that the phone will go on general sale around two weeks later in early August — after a brief pre-order window.</p><p>Pricing isn't clear right now, and considering the situation with <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a> and the skyrocketing cost of memory and storage, it's likely that we'll see some kind of price hike. So expect to have to pay more than the $1,999 starting price of <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a>.</p><p>The Pixel 11 Pro Fold is set to arrive later this year, likely towards the end of August alongside the rest of the Pixel 11 series. We don't have any kind of date yet, so we can only guess based on past experience. </p><p>Likewise, we have no idea how much the phone is set to cost, and whether we'll see a price hike compared to the $1,799 <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>. I wouldn't bet on there not being a price increase, especially if Google includes 16GB of RAM for another year.</p><h3 class="article-body__section" id="section-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-design-display"><span>Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Design & Display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1268px;"><p class="vanilla-image-block" style="padding-top:75.47%;"><img id="8MjYLKFR7VtNJZsP4Q6mXB" name="Screenshot 2026-03-10 104112" alt="onleaks android headlines pixel 11 pro fold renders" src="https://cdn.mos.cms.futurecdn.net/8MjYLKFR7VtNJZsP4Q6mXB.png" mos="" align="middle" fullscreen="" width="1268" height="957" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks/Android Headlines)</span></figcaption></figure><p>We're not expecting huge changes to the design of either phone this year, though the Z Fold 8 Ultra is rumored to be coming with a slightly <a href="https://www.tomsguide.com/phones/samsung-phones/first-look-samsung-galaxy-z-fold-8-renders-just-leaked-the-new-foldable-in-full">larger 8-inch foldable screen paired with a 6.5-inch cover display</a>. Both screens are expected to be OLED panels, complete with 120Hz refresh rates. However <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-may-eliminate-the-display-crease-too-step-aside-iphone-fold">the display may be creaseless</a>, or as close as Samsung can get.</p><p>All the big changes are happening to the Galaxy Z Fold 8, which was previously known as the Z Fold Wide. This new model will have a shorter and wider screen than the Ultra, with a similar look to what we expect Apple will offer with the iPhone Ultra.</p><p>The Pixel 11 Pro Fold is also expected to lose 0.1-inches off its cover display, but with no other meaningful change. Hopefully this is due to Google reducing the size of the phone and its bezels.</p><p>The 8-inch interior display is expected to stay the same size, though, and both will presumably offer an OLED panel with a 120Hz refresh rate. There's also rumored to be a Nothing-esque light effect on the back of the phone, known as "Pixel Glow."</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-cameras"><span>Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1383px;"><p class="vanilla-image-block" style="padding-top:56.04%;"><img id="3GEBFS67DHYiPEKSBDeuga" name="HG4LIfPasAAOryc" alt="galaxy z fold 8m, z flip 8 and fold wide dummy units" src="https://cdn.mos.cms.futurecdn.net/3GEBFS67DHYiPEKSBDeuga.jpg" mos="" align="middle" fullscreen="" width="1383" height="775" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sonny Dickson)</span></figcaption></figure><p>We're not expecting Samsung to do much with the Z Fold 8 Ultra's main camera, and will stick with the same 200MP lens that debuted on the Z Fold 7 last year. However, we are expecting to see the <a href="https://www.galaxyclub.nl/samsung/galaxy-z-fold-8/" target="_blank">ultrawide camera jump</a> from 12MP to 50MP, while the telephoto lens is tipped for a modest increase from 10MP to 12MP. The optical zoom will likely stay at 3x magnification though.</p><p>All we know about the Pixel 11 Pro Fold main camera is that it should have a slight resolution boost <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">from 48MP to 50MP</a>. Leaked specs haven't revealed what we can expect from the other cameras, but I certainly hope that we see a minor boost on the 10.5MP ultrawide camera at the very least. If Google wants its foldables to compete with Samsung and Apple, then it's going to need to up its game.</p><p>Thankfully, Google does have the computational photography experience to boost the quality of the pictures with AI. But that can only go so far, and since the Z Fold 7 already took excellent photos it's about time Google caught up with its foldable cameras.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-performance"><span>Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1266px;"><p class="vanilla-image-block" style="padding-top:75.12%;"><img id="kCYQ3pKY2zaKbfhjDTSdYB" name="Screenshot 2026-03-10 104103" alt="onleaks android headlines pixel 11 pro fold renders" src="https://cdn.mos.cms.futurecdn.net/kCYQ3pKY2zaKbfhjDTSdYB.png" mos="" align="middle" fullscreen="" width="1266" height="951" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks/Android Headlines)</span></figcaption></figure><p>On the performance side of things, it's clear that Samsung will be many steps ahead of Google. Pixel phones are not known for their speed, and since the Pixel 11 Pro Fold is likely to be running another <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Tensor chipset (the G6</a>), things aren't likely to change this year. </p><p>That said, Pixel phones typically have more base RAM than Galaxy phones, with the 10 Pro Fold offering 16GB to the Z Fold 7's 12GB. Higher levels of RAM are typically only available on the highest storage option, and that's likely to be the same situation this year — more so considering all the RAM shortages. The extra memory, along with the alleged AI-optimization of the Tensor chips, may give the Pixel 11 Pro Fold an edge in AI processes.</p><p>However, leaked specs suggest Google may take a leaf out of Samsung's book and <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">reduce the base amount of RAM</a> and keep 16GB exclusive to higher specc'd models. </p><p>When it comes to raw performance power, Samsung is likely to dominate. Z Folds typically have the flagship Snapdragon chipset, which this year would be the Snapdragon 8 Elite Gen 5. </p><p>On top of that, the Pixel 11 series is expected to downgrade the Tensor G6 from eight cores to seven, which will likely cause a noticeable drop in performance power. Likewise,<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades"> Google is said to be using a PowerVR CXTP-48-1536 GPU</a>, which is based on 2021 chip architecture. So you could see a performance hit for resource-intensive activities like gaming and video editing.</p><p>Don't expect to see the Exynos 2600 on the Z Fold, though. While Samsung has started using its own chips on the Z Flip series, and on Galaxy S phones in certain regions, Ultra series phones typically get the Snapdragon chip everywhere.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-battery-charging"><span>Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Battery & charging</span></h3><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="MUz7SRqUeezZBpFKKe2afQ" name="Galaxy Z Fold 8 case" alt="Galaxy Z Fold 8 case render" src="https://cdn.mos.cms.futurecdn.net/MUz7SRqUeezZBpFKKe2afQ.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: Android Headlines)</span></figcaption></figure><p>Rumors suggest that the Z Fold 8 Ultra could upgrade the battery by increasing the capacity from <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8s-latest-rumored-upgrade-could-show-samsungs-finally-listening">4,400 mAh to 5,000 mAh </a>— the same as the Galaxy S26 Ultra. Sadly, the Pixel 11 Pro Fold's leaked specs suggest that it will be doing the opposite, <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">dropping from 5,015 mAh to 4,658 mAh</a>.</p><p>While higher capacity doesn't necessarily mean longer battery, the fact that Samsung is offering more power reserves definitely works out in its favor. When you remember that Pixel phones haven't always had the best battery life in the past, a drop in capacity is rather worrying.</p><p>There's no word on how fast the 11 Pro Fold will charge, though we will likely see 15W Qi2 wireless charging make another appearance. The Z Fold 8 Ultra is rumored to be <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-tipped-for-a-major-charging-upgrade-iphone-fold-should-take-notes">upgraded to 45W charging </a>which, while not as impressive as the S26 Ultra's 60W is still a noticeable improvement from the 25W on past phones.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-ultra-vs-google-pixel-11-pro-fold-outlook"><span>Samsung Galaxy Z Fold Ultra vs Google Pixel 11 Pro Fold: Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1607px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iWjN5TBTWe8mz96yhig3Ad" name="Screenshot 2026-03-10 104108" alt="google pixel 11 pro fold leaked cad renders" src="https://cdn.mos.cms.futurecdn.net/iWjN5TBTWe8mz96yhig3Ad.png" mos="" align="middle" fullscreen="" width="1607" height="904" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Onleaks/Android Headlines)</span></figcaption></figure><p>Based on the rumors and leaks so far, it doesn't seem like there are a lot of major changes happening to the Galaxy Z Fold 8 Ultra and Pixel 11 Pro Fold. Certainly nothing that upsets the status quo in any meaningful way. </p><p>Samsung should have an edge on camera hardware, performance and battery life, and the crease-free display sounds promising. And Google should offer a Pixel experience in foldable form once more — which includes a lot of AI, early access to updates and some exclusive features.</p><p>It certainly seems as though Samsung has the upper hand, and while that may eventually be the case it doesn't change the fact that the Z Fold lineup is rather expensive. In fact, with everything going on, I would be shocked if there wasn't another price hike this year as well. So the Pixel 11 Pro Fold could have the value advantage.</p><p>But with Galaxy Unpacked coming in fast, and Google's own launch event likely following roughly a month later, it shouldn't be long before we can test these phones and make a proper conclusion for ourselves.</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/easily-the-biggest-leak-in-apples-history-iphone-18-pro-final-design-may-have-just-been-revealed-in-a-stolen-drop-test-video">'Easily the biggest leak in Apple's history': iPhone 18 Pro final design may have just been revealed in a stolen drop test video</a></li><li><a href="https://www.tomsguide.com/phones/your-location-data-is-now-officially-protected-by-the-fourth-amendment-heres-what-that-means-for-you">Your location data is now officially protected by the fourth amendment — here's what that means for you</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/major-samsung-galaxy-z-fold-8-leak-shows-off-the-unreleased-foldables-and-cases-heres-what-you-need-to-know">Samsung Galaxy Z Fold 8, Z Fold 8 Ultra and Z Flip 8 Ultra just leaked ahead of Unpacked</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I looked through dozens of phone deals and the Pixel 10 Pro at 32% off is pound for pound the best one — here's why ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Phones are expensive, but thanks to Prime Day, you’ll find epic discounts on several of the <a href="https://www.tomsguide.com/best-picks/best-phones">best phones</a> I’ve tested. I looked through dozens of deals and this <a href="https://www.amazon.com/Google-Pixel-Pro-Smartphone-Fast-Charging/dp/B0FFTS7G7R/" target="_blank" rel="nofollow">Pixel 10 Pro at 32% off from Amazon</a> is pound-for-pound the best deal I’ve uncovered.</p><p>Normally, you’d pay a whopping $999 for this top-tier Android phone, but a $315 instant discount drops it to $684. Amazon’s offer basically makes this flagship phone cost as much as the average mid-range phone. Best of all, it’s an unlocked model that’s ready to connect to any wireless carrier.</p><p>Amazon has even more Pixel gadgets on sale for Prime Day, with savings up to 51% off for a limited time. Here are all the Pixel devices I think you should look at.</p><h2 class="article-body__section" id="section-the-best-pixel-prime-day-deals-quick-links"><span>The best Pixel Prime Day deals: Quick Links</span></h2><ul><li><strong>Google Pixel Buds A-series: </strong><a href="https://www.amazon.com/Google-Nest-GA02213-Pixel-Charging/dp/B0977RX58V/" target="_blank" rel="nofollow"><strong>was $99 now $49 @ Amazon</strong></a></li><li><strong>Google Fitbit Ace LTE: </strong><a href="https://www.amazon.com/Fitbit-Google-Ace-LTE-Activity-Based/dp/B0CV5T2YG6/" target="_blank" rel="nofollow"><strong>was $123 now $59 @ Amazon</strong></a></li><li><strong>Google Pixel Buds Pro 2: </strong><a href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QF9RC/" target="_blank" rel="nofollow"><strong>was $229 now $160 @ Amazon</strong></a></li><li><strong>Google Pixel Watch 4: </strong><a href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0FJWPF7GN/" target="_blank" rel="nofollow"><strong>was $449 now $344 @ Amazon</strong></a></li><li><strong>Google Pixel 10a: </strong><a href="https://www.amazon.com/Google-Pixel-10a-Battery-Camera/dp/B0GHRBHVMJ/" target="_blank" rel="nofollow"><strong>was $499 now $399 @ Amazon</strong></a></li><li><strong>Google Pixel 10: </strong><a href="https://www.amazon.com/Google-Pixel-Smartphone-Fast-Charging-Lemongrass/dp/B0FFTQFHQV/" target="_blank" rel="nofollow"><strong>was $799 now $534 @ Amazon</strong></a></li><li><strong>Google Pixel 10 Pro: </strong><a href="https://www.amazon.com/Google-Pixel-Pro-Smartphone-Fast-Charging/dp/B0FFTS7G7R/" target="_blank" rel="nofollow"><strong>was $999 now $684 @ Amazon</strong></a></li></ul><h2 class="article-body__section" id="section-the-best-pixel-prime-day-deals"><span>The best Pixel Prime Day deals</span></h2><div class="product"><a data-dimension112="f5ffbb42-b26d-465f-9f1f-29125d383548" data-action="Deal Block" data-label="Pixel 10 Pro" data-dimension48="Pixel 10 Pro" data-dimension25="$684" href="https://www.amazon.com/Google-Pixel-Pro-Smartphone-Fast-Charging/dp/B0FFTS7G7R/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="gBTj4DxfczNtAJHXYxS9QY" name="Pixel 10 Pro deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gBTj4DxfczNtAJHXYxS9QY.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade" data-dimension112="f5ffbb42-b26d-465f-9f1f-29125d383548" data-action="Deal Block" data-label="Pixel 10 Pro" data-dimension48="Pixel 10 Pro" data-dimension25="$684">Pixel 10 Pro</a> is the best phone deal I've come across for a number of reasons. First of all, it's the phone with the best AI features I've tested, including things like using AI to enhance zoom photos, Call Screen that uses the assistant to take phone calls for me, and the ability to make complex photos a breeze by simply describing what you want. <a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-using-the-pixel-10a-for-a-week-heres-what-i-like-and-dont-like-about-googles-new-budget-phone">I've reviewed the Pixel 10 Pro</a> and I can tell you it's well worth its cost.<a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Pro-Smartphone-Fast-Charging/dp/B0FFTS7G7R/" target="_blank" rel="nofollow" data-dimension112="f5ffbb42-b26d-465f-9f1f-29125d383548" data-action="Deal Block" data-label="Pixel 10 Pro" data-dimension48="Pixel 10 Pro" data-dimension25="$684">View Deal</a></p></div><div class="product"><a data-dimension112="64570933-f508-48b7-9665-14dea765ddc9" data-action="Deal Block" data-label="Pixel 10" data-dimension48="Pixel 10" data-dimension25="$534" href="https://www.amazon.com/Google-Pixel-Smartphone-Fast-Charging-Lemongrass/dp/B0FFTQFHQV/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bpTaV2HQDC8Bt3dMMYCbnS" name="61OyKi98IuL._AC_SL1500_ copy" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bpTaV2HQDC8Bt3dMMYCbnS.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>My second favorite Pixel deal is this 33% discount on the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review" data-dimension112="64570933-f508-48b7-9665-14dea765ddc9" data-action="Deal Block" data-label="Pixel 10" data-dimension48="Pixel 10" data-dimension25="$534">Pixel 10</a>. When it comes to base flagship models, this one's my favorite — beating out the iPhone 17 and Galaxy S26. Why's that? Well, between the three, it has the best telephoto camera with its 5x optical zoom. On top of that, it shares many of the same AI features as the Pixel 10 Pro models.<a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Smartphone-Fast-Charging-Lemongrass/dp/B0FFTQFHQV/" target="_blank" rel="nofollow" data-dimension112="64570933-f508-48b7-9665-14dea765ddc9" data-action="Deal Block" data-label="Pixel 10" data-dimension48="Pixel 10" data-dimension25="$534">View Deal</a></p></div><div class="product"><a data-dimension112="ecd31a2b-d9a7-41a7-89c9-0cc7afef1403" data-action="Deal Block" data-label="Buds Pro 2" data-dimension48="Buds Pro 2" data-dimension25="$160.55" href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QF9RC/" 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="eLH5FneEmg5wPrM75VhX2e" name="Google Pixel Buds pro 2 prod image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/eLH5FneEmg5wPrM75VhX2e.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Everyone in the Tom's Guide office knows that I religiously wear the <a href="https://www.tomsguide.com/reviews/google-pixel-buds-pro-2" data-dimension112="ecd31a2b-d9a7-41a7-89c9-0cc7afef1403" data-action="Deal Block" data-label="Buds Pro 2" data-dimension48="Buds Pro 2" data-dimension25="$160.55">Pixel Buds Pro 2</a>. Compared to the AirPods Pro, they're a lot smaller and more discrete. I also love how it has pretty good noise cancellation that drowns out all the background noise, so I can write deals like this in peace without disruption. And yes, the sound quality is impressive. I even use these earbuds whenever I <a href="https://www.tomsguide.com/audio/earbuds/my-pixel-buds-pros-are-awesome-for-music-but-theyre-also-just-as-good-at-protecting-my-ears-at-concerts-and-theyre-37-percent-off-right-now">go to live concerts to protect my hearing</a>.<a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QF9RC/" target="_blank" rel="nofollow" data-dimension112="ecd31a2b-d9a7-41a7-89c9-0cc7afef1403" data-action="Deal Block" data-label="Buds Pro 2" data-dimension48="Buds Pro 2" data-dimension25="$160.55">View Deal</a></p></div><div class="product"><a data-dimension112="67090992-d56b-40eb-9077-1bb5008914ae" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$344.99" href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0FJWPF7GN/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:512px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="wy7XXhyxUPseAtePVCoUjC" name="Google Pixel Watch 4 leaked images" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wy7XXhyxUPseAtePVCoUjC.jpg" mos="" align="middle" fullscreen="" width="512" height="512" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you need a reliable smartwatch on your wrist to take away the distractions of your phone, I'd recommend the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android" data-dimension112="67090992-d56b-40eb-9077-1bb5008914ae" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$344.99">Pixel Watch 4</a>. There's a $105 discount right now, and I love using it during workouts to track how far I ran, how many calories I burned, and how to improve my times. It's also incredibly stylish with a variety of interchangeable bands — including a metal link option that instantly makes it look more sophisticated.<a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0FJWPF7GN/" target="_blank" rel="nofollow" data-dimension112="67090992-d56b-40eb-9077-1bb5008914ae" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$344.99">View Deal</a></p></div><div class="product"><a data-dimension112="f409aa60-8da3-468a-b841-bcf2bff413de" data-action="Deal Block" data-label="Pixel 10a" data-dimension48="Pixel 10a" data-dimension25="$399" href="https://www.amazon.com/Google-Pixel-10a-Battery-Camera/dp/B0GHRBHVMJ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="7M4QgqjjgVrvBDyCEUS3u5" name="Pixel 10a deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7M4QgqjjgVrvBDyCEUS3u5.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I know great phones under $500 are hard to come by. While the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10a-review" data-dimension112="f409aa60-8da3-468a-b841-bcf2bff413de" data-action="Deal Block" data-label="Pixel 10a" data-dimension48="Pixel 10a" data-dimension25="$399">Pixel 10a</a> normally sits right at that threshold, Prime Day is giving this budget phone one of its best deals to date with a $100 discount that drops it to just $399. For that price, I think you'll be impressed by how well its dual cameras perform, especially with the AI features that save me so much time.<a class="view-deal button" href="https://www.amazon.com/Google-Pixel-10a-Battery-Camera/dp/B0GHRBHVMJ/" target="_blank" rel="nofollow" data-dimension112="f409aa60-8da3-468a-b841-bcf2bff413de" data-action="Deal Block" data-label="Pixel 10a" data-dimension48="Pixel 10a" data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="b549b481-eb61-4236-b379-d00f28c60cfd" data-action="Deal Block" data-label="Fitbit Ace LTE" data-dimension48="Fitbit Ace LTE" data-dimension25="$59.95" href="https://www.amazon.com/Fitbit-Google-Ace-LTE-Activity-Based/dp/B0CV5T2YG6/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="jMSRShA6R2MzMRodnSoduU" name="fitbit-ace-bb" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jMSRShA6R2MzMRodnSoduU.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>For your kids, the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-ace-lte" data-dimension112="b549b481-eb61-4236-b379-d00f28c60cfd" data-action="Deal Block" data-label="Fitbit Ace LTE" data-dimension48="Fitbit Ace LTE" data-dimension25="$59.95">Google Fitbit Ace LTE</a> is on sale right now for under $100. It's a great way to give them a device for their wrist without the constant distractions you'd normally face with a phone. Part tracker and part activity monitor, this smartwatch is a brilliant solution for keeping them connected.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Google-Ace-LTE-Activity-Based/dp/B0CV5T2YG6/" target="_blank" rel="nofollow" data-dimension112="b549b481-eb61-4236-b379-d00f28c60cfd" data-action="Deal Block" data-label="Fitbit Ace LTE" data-dimension48="Fitbit Ace LTE" data-dimension25="$59.95">View Deal</a></p></div><div class="product"><a data-dimension112="01897cda-37db-4d3c-8024-6bd31046c047" data-action="Deal Block" data-label="Pixel Buds A-series" data-dimension48="Pixel Buds A-series" data-dimension25="$49" href="https://www.amazon.com/Google-Nest-GA02213-Pixel-Charging/dp/B0977RX58V/" 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="YvqHUC3kXZdxY6K2bp9VbL" name="pixel-buds-a-series-bb.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YvqHUC3kXZdxY6K2bp9VbL.jpeg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I understand that wireless earbuds can be pricey, but the <a href="https://www.tomsguide.com/reviews/google-pixel-buds-a-series-review-affordable-and-capable" data-dimension112="01897cda-37db-4d3c-8024-6bd31046c047" data-action="Deal Block" data-label="Pixel Buds A-series" data-dimension48="Pixel Buds A-series" data-dimension25="$49">Pixel Buds A-Series</a> proves you can still get a decent-sounding pair for a fraction of the cost. At under $49, it's the perfect, affordable way to listen to your music while on the go.<a class="view-deal button" href="https://www.amazon.com/Google-Nest-GA02213-Pixel-Charging/dp/B0977RX58V/" target="_blank" rel="nofollow" data-dimension112="01897cda-37db-4d3c-8024-6bd31046c047" data-action="Deal Block" data-label="Pixel Buds A-series" data-dimension48="Pixel Buds A-series" data-dimension25="$49">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Phones&view_mode=savings_squad&widget_title=Top+Prime+Day+phone+deals%2C+as+picked+by+us&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = mode === 'savings_squad' ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button { 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 (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.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 && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.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 seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    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 : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));               }          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += 12;              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/i-looked-through-dozens-of-phone-deals-and-the-pixel-10-pro-at-32-percent-off-is-pound-for-pound-the-best-one-heres-why</link>
                                                                            <description>
                            <![CDATA[ After looking through dozens of phone deals for Prime Day, the Pixel 10 Pro at 32% off is the best one for a number of reasons. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jD2ZkEe53wjqiBzYBgd6tT</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/mrgPNP5DU8ptLAyAqKoHf5-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 24 Jun 2026 15:52:14 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Sales Events]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.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/mrgPNP5DU8ptLAyAqKoHf5-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Pixel 10 Pro Prime Day deal.]]></media:description>                                                            <media:text><![CDATA[Pixel 10 Pro Prime Day deal.]]></media:text>
                                <media:title type="plain"><![CDATA[Pixel 10 Pro Prime Day deal.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/mrgPNP5DU8ptLAyAqKoHf5-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Phones are expensive, but thanks to Prime Day, you’ll find epic discounts on several of the <a href="https://www.tomsguide.com/best-picks/best-phones">best phones</a> I’ve tested. I looked through dozens of deals and this <a href="https://www.amazon.com/Google-Pixel-Pro-Smartphone-Fast-Charging/dp/B0FFTS7G7R/" target="_blank" rel="nofollow">Pixel 10 Pro at 32% off from Amazon</a> is pound-for-pound the best deal I’ve uncovered.</p><p>Normally, you’d pay a whopping $999 for this top-tier Android phone, but a $315 instant discount drops it to $684. Amazon’s offer basically makes this flagship phone cost as much as the average mid-range phone. Best of all, it’s an unlocked model that’s ready to connect to any wireless carrier.</p><p>Amazon has even more Pixel gadgets on sale for Prime Day, with savings up to 51% off for a limited time. Here are all the Pixel devices I think you should look at.</p><h2 class="article-body__section" id="section-the-best-pixel-prime-day-deals-quick-links"><span>The best Pixel Prime Day deals: Quick Links</span></h2><ul><li><strong>Google Pixel Buds A-series: </strong><a href="https://www.amazon.com/Google-Nest-GA02213-Pixel-Charging/dp/B0977RX58V/" target="_blank" rel="nofollow"><strong>was $99 now $49 @ Amazon</strong></a></li><li><strong>Google Fitbit Ace LTE: </strong><a href="https://www.amazon.com/Fitbit-Google-Ace-LTE-Activity-Based/dp/B0CV5T2YG6/" target="_blank" rel="nofollow"><strong>was $123 now $59 @ Amazon</strong></a></li><li><strong>Google Pixel Buds Pro 2: </strong><a href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QF9RC/" target="_blank" rel="nofollow"><strong>was $229 now $160 @ Amazon</strong></a></li><li><strong>Google Pixel Watch 4: </strong><a href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0FJWPF7GN/" target="_blank" rel="nofollow"><strong>was $449 now $344 @ Amazon</strong></a></li><li><strong>Google Pixel 10a: </strong><a href="https://www.amazon.com/Google-Pixel-10a-Battery-Camera/dp/B0GHRBHVMJ/" target="_blank" rel="nofollow"><strong>was $499 now $399 @ Amazon</strong></a></li><li><strong>Google Pixel 10: </strong><a href="https://www.amazon.com/Google-Pixel-Smartphone-Fast-Charging-Lemongrass/dp/B0FFTQFHQV/" target="_blank" rel="nofollow"><strong>was $799 now $534 @ Amazon</strong></a></li><li><strong>Google Pixel 10 Pro: </strong><a href="https://www.amazon.com/Google-Pixel-Pro-Smartphone-Fast-Charging/dp/B0FFTS7G7R/" target="_blank" rel="nofollow"><strong>was $999 now $684 @ Amazon</strong></a></li></ul><h2 class="article-body__section" id="section-the-best-pixel-prime-day-deals"><span>The best Pixel Prime Day deals</span></h2><div class="product"><a data-dimension112="f5ffbb42-b26d-465f-9f1f-29125d383548" data-action="Deal Block" data-label="Pixel 10 Pro" data-dimension48="Pixel 10 Pro" data-dimension25="$684" href="https://www.amazon.com/Google-Pixel-Pro-Smartphone-Fast-Charging/dp/B0FFTS7G7R/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="gBTj4DxfczNtAJHXYxS9QY" name="Pixel 10 Pro deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gBTj4DxfczNtAJHXYxS9QY.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade" data-dimension112="f5ffbb42-b26d-465f-9f1f-29125d383548" data-action="Deal Block" data-label="Pixel 10 Pro" data-dimension48="Pixel 10 Pro" data-dimension25="$684">Pixel 10 Pro</a> is the best phone deal I've come across for a number of reasons. First of all, it's the phone with the best AI features I've tested, including things like using AI to enhance zoom photos, Call Screen that uses the assistant to take phone calls for me, and the ability to make complex photos a breeze by simply describing what you want. <a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-using-the-pixel-10a-for-a-week-heres-what-i-like-and-dont-like-about-googles-new-budget-phone">I've reviewed the Pixel 10 Pro</a> and I can tell you it's well worth its cost.<a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Pro-Smartphone-Fast-Charging/dp/B0FFTS7G7R/" target="_blank" rel="nofollow" data-dimension112="f5ffbb42-b26d-465f-9f1f-29125d383548" data-action="Deal Block" data-label="Pixel 10 Pro" data-dimension48="Pixel 10 Pro" data-dimension25="$684">View Deal</a></p></div><div class="product"><a data-dimension112="64570933-f508-48b7-9665-14dea765ddc9" data-action="Deal Block" data-label="Pixel 10" data-dimension48="Pixel 10" data-dimension25="$534" href="https://www.amazon.com/Google-Pixel-Smartphone-Fast-Charging-Lemongrass/dp/B0FFTQFHQV/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bpTaV2HQDC8Bt3dMMYCbnS" name="61OyKi98IuL._AC_SL1500_ copy" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bpTaV2HQDC8Bt3dMMYCbnS.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>My second favorite Pixel deal is this 33% discount on the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review" data-dimension112="64570933-f508-48b7-9665-14dea765ddc9" data-action="Deal Block" data-label="Pixel 10" data-dimension48="Pixel 10" data-dimension25="$534">Pixel 10</a>. When it comes to base flagship models, this one's my favorite — beating out the iPhone 17 and Galaxy S26. Why's that? Well, between the three, it has the best telephoto camera with its 5x optical zoom. On top of that, it shares many of the same AI features as the Pixel 10 Pro models.<a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Smartphone-Fast-Charging-Lemongrass/dp/B0FFTQFHQV/" target="_blank" rel="nofollow" data-dimension112="64570933-f508-48b7-9665-14dea765ddc9" data-action="Deal Block" data-label="Pixel 10" data-dimension48="Pixel 10" data-dimension25="$534">View Deal</a></p></div><div class="product"><a data-dimension112="ecd31a2b-d9a7-41a7-89c9-0cc7afef1403" data-action="Deal Block" data-label="Buds Pro 2" data-dimension48="Buds Pro 2" data-dimension25="$160.55" href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QF9RC/" 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="eLH5FneEmg5wPrM75VhX2e" name="Google Pixel Buds pro 2 prod image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/eLH5FneEmg5wPrM75VhX2e.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Everyone in the Tom's Guide office knows that I religiously wear the <a href="https://www.tomsguide.com/reviews/google-pixel-buds-pro-2" data-dimension112="ecd31a2b-d9a7-41a7-89c9-0cc7afef1403" data-action="Deal Block" data-label="Buds Pro 2" data-dimension48="Buds Pro 2" data-dimension25="$160.55">Pixel Buds Pro 2</a>. Compared to the AirPods Pro, they're a lot smaller and more discrete. I also love how it has pretty good noise cancellation that drowns out all the background noise, so I can write deals like this in peace without disruption. And yes, the sound quality is impressive. I even use these earbuds whenever I <a href="https://www.tomsguide.com/audio/earbuds/my-pixel-buds-pros-are-awesome-for-music-but-theyre-also-just-as-good-at-protecting-my-ears-at-concerts-and-theyre-37-percent-off-right-now">go to live concerts to protect my hearing</a>.<a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79QF9RC/" target="_blank" rel="nofollow" data-dimension112="ecd31a2b-d9a7-41a7-89c9-0cc7afef1403" data-action="Deal Block" data-label="Buds Pro 2" data-dimension48="Buds Pro 2" data-dimension25="$160.55">View Deal</a></p></div><div class="product"><a data-dimension112="67090992-d56b-40eb-9077-1bb5008914ae" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$344.99" href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0FJWPF7GN/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:512px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="wy7XXhyxUPseAtePVCoUjC" name="Google Pixel Watch 4 leaked images" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wy7XXhyxUPseAtePVCoUjC.jpg" mos="" align="middle" fullscreen="" width="512" height="512" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you need a reliable smartwatch on your wrist to take away the distractions of your phone, I'd recommend the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android" data-dimension112="67090992-d56b-40eb-9077-1bb5008914ae" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$344.99">Pixel Watch 4</a>. There's a $105 discount right now, and I love using it during workouts to track how far I ran, how many calories I burned, and how to improve my times. It's also incredibly stylish with a variety of interchangeable bands — including a metal link option that instantly makes it look more sophisticated.<a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0FJWPF7GN/" target="_blank" rel="nofollow" data-dimension112="67090992-d56b-40eb-9077-1bb5008914ae" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$344.99">View Deal</a></p></div><div class="product"><a data-dimension112="f409aa60-8da3-468a-b841-bcf2bff413de" data-action="Deal Block" data-label="Pixel 10a" data-dimension48="Pixel 10a" data-dimension25="$399" href="https://www.amazon.com/Google-Pixel-10a-Battery-Camera/dp/B0GHRBHVMJ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="7M4QgqjjgVrvBDyCEUS3u5" name="Pixel 10a deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7M4QgqjjgVrvBDyCEUS3u5.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I know great phones under $500 are hard to come by. While the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10a-review" data-dimension112="f409aa60-8da3-468a-b841-bcf2bff413de" data-action="Deal Block" data-label="Pixel 10a" data-dimension48="Pixel 10a" data-dimension25="$399">Pixel 10a</a> normally sits right at that threshold, Prime Day is giving this budget phone one of its best deals to date with a $100 discount that drops it to just $399. For that price, I think you'll be impressed by how well its dual cameras perform, especially with the AI features that save me so much time.<a class="view-deal button" href="https://www.amazon.com/Google-Pixel-10a-Battery-Camera/dp/B0GHRBHVMJ/" target="_blank" rel="nofollow" data-dimension112="f409aa60-8da3-468a-b841-bcf2bff413de" data-action="Deal Block" data-label="Pixel 10a" data-dimension48="Pixel 10a" data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="b549b481-eb61-4236-b379-d00f28c60cfd" data-action="Deal Block" data-label="Fitbit Ace LTE" data-dimension48="Fitbit Ace LTE" data-dimension25="$59.95" href="https://www.amazon.com/Fitbit-Google-Ace-LTE-Activity-Based/dp/B0CV5T2YG6/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="jMSRShA6R2MzMRodnSoduU" name="fitbit-ace-bb" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jMSRShA6R2MzMRodnSoduU.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>For your kids, the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-ace-lte" data-dimension112="b549b481-eb61-4236-b379-d00f28c60cfd" data-action="Deal Block" data-label="Fitbit Ace LTE" data-dimension48="Fitbit Ace LTE" data-dimension25="$59.95">Google Fitbit Ace LTE</a> is on sale right now for under $100. It's a great way to give them a device for their wrist without the constant distractions you'd normally face with a phone. Part tracker and part activity monitor, this smartwatch is a brilliant solution for keeping them connected.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Google-Ace-LTE-Activity-Based/dp/B0CV5T2YG6/" target="_blank" rel="nofollow" data-dimension112="b549b481-eb61-4236-b379-d00f28c60cfd" data-action="Deal Block" data-label="Fitbit Ace LTE" data-dimension48="Fitbit Ace LTE" data-dimension25="$59.95">View Deal</a></p></div><div class="product"><a data-dimension112="01897cda-37db-4d3c-8024-6bd31046c047" data-action="Deal Block" data-label="Pixel Buds A-series" data-dimension48="Pixel Buds A-series" data-dimension25="$49" href="https://www.amazon.com/Google-Nest-GA02213-Pixel-Charging/dp/B0977RX58V/" 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="YvqHUC3kXZdxY6K2bp9VbL" name="pixel-buds-a-series-bb.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YvqHUC3kXZdxY6K2bp9VbL.jpeg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I understand that wireless earbuds can be pricey, but the <a href="https://www.tomsguide.com/reviews/google-pixel-buds-a-series-review-affordable-and-capable" data-dimension112="01897cda-37db-4d3c-8024-6bd31046c047" data-action="Deal Block" data-label="Pixel Buds A-series" data-dimension48="Pixel Buds A-series" data-dimension25="$49">Pixel Buds A-Series</a> proves you can still get a decent-sounding pair for a fraction of the cost. At under $49, it's the perfect, affordable way to listen to your music while on the go.<a class="view-deal button" href="https://www.amazon.com/Google-Nest-GA02213-Pixel-Charging/dp/B0977RX58V/" target="_blank" rel="nofollow" data-dimension112="01897cda-37db-4d3c-8024-6bd31046c047" data-action="Deal Block" data-label="Pixel Buds A-series" data-dimension48="Pixel Buds A-series" data-dimension25="$49">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Phones&view_mode=savings_squad&widget_title=Top+Prime+Day+phone+deals%2C+as+picked+by+us&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = mode === 'savings_squad' ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button { 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 (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.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 && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.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 seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    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 : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));               }          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += 12;              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Android 17 officially rolls out to Pixel devices with new features — screen reactions, bubbles, gaming mode, and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The wait is over as <a href="https://www.tomsguide.com/phones/android-phones/android-17-changes-worth-paying-attention-to">Android 17</a> officially rolls out today, hitting Pixel phones first with additional features that weren’t previously revealed at <a href="https://www.tomsguide.com/news/live/google-io-2026-live-news-updates">Google I/O 2026</a> or <a href="https://www.tomsguide.com/phones/live/the-android-show-google-i-o-edition-live-all-the-latest-android-gemini-ai-and-android-xr-news-as-it-happens">The Android Show: I/O Edition</a>. Eligible Pixel devices will be the first to experience the upgrade, followed by a broader rollout to other compatible devices throughout the year.</p><p><a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever">Gemini Intelligence</a> was one of the biggest reveals, though users will have to wait a smidge longer to access it, with a rollout slated for later this summer. Even without it, the Android 17 update is packed with plenty of new features to tide people over. Pixel owners are also getting a double dose of updates today, courtesy of the June 2026 Pixel Drop and new optimizations landing on Wear OS 7. </p><p>Here's everything you need to know about G<a href="https://blog.google/products-and-platforms/platforms/android/android-17-features" target="_blank">oogle’s latest ecosystem upgrades</a>.</p><h2 id="more-new-features-with-android-17">More new features with Android 17 </h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ZQVS57EMA4yL3RJ8c7Z8Co.jpg" alt="Android 17 new features." /><figcaption><small role="credit">Google</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/aT4rqzM9WQ2eaCtLMxWQvn.jpg" alt="Android 17 new features." /><figcaption><small role="credit">Google</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/tJgZsTvn5yYxe2dHHMrz4o.jpg" alt="Android 17 new features." /><figcaption><small role="credit">Google</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/AoMqA2C957SBGLEemfXtBD.gif" alt="Android 17 - Screen Reactions." /><figcaption><small role="credit">Google</small></figcaption></figure></figure><p>Android 17 is officially rolling out to Pixel devices first, with this update introducing massive productivity, gaming, and security overhauls. Here's all the new Android 17 features you can expect to tap into after installing the update.</p><ul><li><strong>Bubbles:</strong> If you're a power multitasker, then you'll love the Bubbles feature in Android 17 that allows you to turn any app into a compact, floating window. It's the alternative to simply closing an app and going back to it because Bubbles on larger screen devices will show up as at the bottom of the screen for easier access.</li><li><strong>Screen Reactions:</strong> This one's really helpful for users who love to record themselves because Screen Reactions revamps the screen-recording toolbar to let you capture your device's display and your selfie camera simultaneously.</li><li><strong>Foldable Gaming Mode:</strong> Gamers who prefer on-screen controls can now opt for a virtual, on-screen gamepad they can use with the new foldable gaming mode specifically for devices like the Pixel 10 Pro Fold. When enabled you get a dedicated 50/50 layout with the game on top and controls on the bottom.</li><li><strong>Biometric "Mark as Lost":</strong> It's nerve wrecking when you lose your phone, but the new "Mark as Lost" feature with Android 17 can let you lock it using your biometrics via the Find Hub. Even if a thief knows your passcode, they can't access your data or disable tracking.</li><li><strong>Granular Privacy & Anti-Theft:</strong> You can now grant apps temporary access to your precise location or share specific contacts rather than your whole book. Additional options like PIN guess limits and longer wait times have been added to stop brute-force entry.</li></ul><h2 id="june-2026-pixel-feature-drop">June 2026 Pixel feature drop</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="ruCZxzSgPPumFbvgVXmPu4" name="Android 17 - Conversational Editing" alt="Android 17 - Conversational Editing." src="https://cdn.mos.cms.futurecdn.net/ruCZxzSgPPumFbvgVXmPu4.jpg" mos="" align="middle" fullscreen="" width="1510" height="900" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's known for frequently releasing Pixel Feature Drops throughout the year, and its June 2026 one is no exception. The latest update is packed with new AI features, creation tools, and global expansions for supported Pixel phones, tablets, and watches. Here's just some of the most popular features coming out.</p><ul><li><strong>Gemini Omni:</strong> For Gemini Pro users, you can now type a text prompt into the Gemini app to generate a custom, high-quality video by just telling it what you want.</li><li><strong>Lyria 3:</strong> Create original tracks from scratch. Just prompt Gemini with text or images, customize the vocals, style, and tempo, and share the track.</li><li><strong>Conversational Editing:</strong> Pixel users in Germany, the U.K., France, Spain, and Italy can now execute complex, multi-step photo edits simply by talking to their phones.</li><li><strong>AirDrop expanded support:</strong> Android Quick Share expands its cross-platform capabilities, allowing Pixel 8a and 9a users to easily share files globally with AirDrop-enabled devices.</li><li><strong>Ecosystem Emergency Detection:</strong> Select Pixel watches (from Pixel Watch 2 to 4) now integrate Emergency Sharing directly into Car Crash, Fall, and Loss of Pulse detection, automatically alerting emergency services and custom contacts if a severe event happens.</li></ul><h2 id="refreshes-your-wrist-with-wear-os-7">Refreshes your wrist with Wear OS 7 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1094px;"><p class="vanilla-image-block" style="padding-top:41.50%;"><img id="yywcZfrV5u8Y2nHvLtjP27" name="Wear OS 7" alt="Wear OS 7." src="https://cdn.mos.cms.futurecdn.net/yywcZfrV5u8Y2nHvLtjP27.jpg" mos="" align="middle" fullscreen="" width="1094" height="454" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Rounding out the massive wave of updates is Wear OS 7, which officially begins its rollout to eligible Pixel Watch devices today. This latest wearable platform update prioritizes seamless cross-device utility and smarter, real-time tracking directly on your wrist. There's also new personalized help features with Gemini Intelligence, which will be coming later.</p><ul><li><strong>Live Updates:</strong> Never miss a moment like the score of a World Cup game or waiting on an Uber ride with Live Updates that give you glanceable, real time details directly from your watch face.</li><li><strong>Cross-Device Control:</strong> Manage media playback across headphones or home speakers with a new media output switcher. For example, you can preview photos taken on a pair of smart glasses right from your wrist.</li><li><strong>Battery Boost:</strong> Deep, system-level power optimizations will give users upgrading from Wear OS 6 up to a 10% bump in battery life.</li><li><strong>Gemini Intelligence:</strong> Later this year, select Wear OS 7 devices will get a massive upgrade courtesy of Gemini Intelligence, transforming your smartwatch into a deeply personalized AI assistant. You'll be able to use natural language to build custom dashboards through Create My Widget.</li></ul><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORVvyO"></div>                            </div>                            <script src="https://kwizly.com/embed/ORVvyO.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/i-tested-the-new-ai-photo-clean-up-on-ios-27-vs-ios-26-and-its-shockingly-better">I tested the new AI photo Clean Up on iOS 27 vs iOS 26 — and it's shockingly better</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-beta-has-new-and-improved-dictation-software-i-tested-it-by-writing-this-whole-article-with-my-voice">iOS 27 beta has new and improved dictation software — I tested it by writing this whole article with my voice</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-and-macbook-ultra-teased-in-ios-27-and-macos-27-heres-what-we-know-so-far">iPhone Ultra and MacBook Ultra teased in iOS 27 and macOS 27 — here's what we know so far</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>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</link>
                                                                            <description>
                            <![CDATA[ Google's massive June 2026 software drop delivers Android 17's productivity and security overhauls to Pixel devices, alongside new Wear OS 7 features. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">8zLEdA6tKW7mbBvLJMZrcN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/pCgjxN2tgsf6c2ZxJj7hP8-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 16 Jun 2026 18:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.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/pCgjxN2tgsf6c2ZxJj7hP8-1280-80.jpg">
                                                            <media:credit><![CDATA[Google/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Android 17]]></media:description>                                                            <media:text><![CDATA[Android 17]]></media:text>
                                <media:title type="plain"><![CDATA[Android 17]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/pCgjxN2tgsf6c2ZxJj7hP8-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The wait is over as <a href="https://www.tomsguide.com/phones/android-phones/android-17-changes-worth-paying-attention-to">Android 17</a> officially rolls out today, hitting Pixel phones first with additional features that weren’t previously revealed at <a href="https://www.tomsguide.com/news/live/google-io-2026-live-news-updates">Google I/O 2026</a> or <a href="https://www.tomsguide.com/phones/live/the-android-show-google-i-o-edition-live-all-the-latest-android-gemini-ai-and-android-xr-news-as-it-happens">The Android Show: I/O Edition</a>. Eligible Pixel devices will be the first to experience the upgrade, followed by a broader rollout to other compatible devices throughout the year.</p><p><a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever">Gemini Intelligence</a> was one of the biggest reveals, though users will have to wait a smidge longer to access it, with a rollout slated for later this summer. Even without it, the Android 17 update is packed with plenty of new features to tide people over. Pixel owners are also getting a double dose of updates today, courtesy of the June 2026 Pixel Drop and new optimizations landing on Wear OS 7. </p><p>Here's everything you need to know about G<a href="https://blog.google/products-and-platforms/platforms/android/android-17-features" target="_blank">oogle’s latest ecosystem upgrades</a>.</p><h2 id="more-new-features-with-android-17">More new features with Android 17 </h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ZQVS57EMA4yL3RJ8c7Z8Co.jpg" alt="Android 17 new features." /><figcaption><small role="credit">Google</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/aT4rqzM9WQ2eaCtLMxWQvn.jpg" alt="Android 17 new features." /><figcaption><small role="credit">Google</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/tJgZsTvn5yYxe2dHHMrz4o.jpg" alt="Android 17 new features." /><figcaption><small role="credit">Google</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/AoMqA2C957SBGLEemfXtBD.gif" alt="Android 17 - Screen Reactions." /><figcaption><small role="credit">Google</small></figcaption></figure></figure><p>Android 17 is officially rolling out to Pixel devices first, with this update introducing massive productivity, gaming, and security overhauls. Here's all the new Android 17 features you can expect to tap into after installing the update.</p><ul><li><strong>Bubbles:</strong> If you're a power multitasker, then you'll love the Bubbles feature in Android 17 that allows you to turn any app into a compact, floating window. It's the alternative to simply closing an app and going back to it because Bubbles on larger screen devices will show up as at the bottom of the screen for easier access.</li><li><strong>Screen Reactions:</strong> This one's really helpful for users who love to record themselves because Screen Reactions revamps the screen-recording toolbar to let you capture your device's display and your selfie camera simultaneously.</li><li><strong>Foldable Gaming Mode:</strong> Gamers who prefer on-screen controls can now opt for a virtual, on-screen gamepad they can use with the new foldable gaming mode specifically for devices like the Pixel 10 Pro Fold. When enabled you get a dedicated 50/50 layout with the game on top and controls on the bottom.</li><li><strong>Biometric "Mark as Lost":</strong> It's nerve wrecking when you lose your phone, but the new "Mark as Lost" feature with Android 17 can let you lock it using your biometrics via the Find Hub. Even if a thief knows your passcode, they can't access your data or disable tracking.</li><li><strong>Granular Privacy & Anti-Theft:</strong> You can now grant apps temporary access to your precise location or share specific contacts rather than your whole book. Additional options like PIN guess limits and longer wait times have been added to stop brute-force entry.</li></ul><h2 id="june-2026-pixel-feature-drop">June 2026 Pixel feature drop</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="ruCZxzSgPPumFbvgVXmPu4" name="Android 17 - Conversational Editing" alt="Android 17 - Conversational Editing." src="https://cdn.mos.cms.futurecdn.net/ruCZxzSgPPumFbvgVXmPu4.jpg" mos="" align="middle" fullscreen="" width="1510" height="900" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's known for frequently releasing Pixel Feature Drops throughout the year, and its June 2026 one is no exception. The latest update is packed with new AI features, creation tools, and global expansions for supported Pixel phones, tablets, and watches. Here's just some of the most popular features coming out.</p><ul><li><strong>Gemini Omni:</strong> For Gemini Pro users, you can now type a text prompt into the Gemini app to generate a custom, high-quality video by just telling it what you want.</li><li><strong>Lyria 3:</strong> Create original tracks from scratch. Just prompt Gemini with text or images, customize the vocals, style, and tempo, and share the track.</li><li><strong>Conversational Editing:</strong> Pixel users in Germany, the U.K., France, Spain, and Italy can now execute complex, multi-step photo edits simply by talking to their phones.</li><li><strong>AirDrop expanded support:</strong> Android Quick Share expands its cross-platform capabilities, allowing Pixel 8a and 9a users to easily share files globally with AirDrop-enabled devices.</li><li><strong>Ecosystem Emergency Detection:</strong> Select Pixel watches (from Pixel Watch 2 to 4) now integrate Emergency Sharing directly into Car Crash, Fall, and Loss of Pulse detection, automatically alerting emergency services and custom contacts if a severe event happens.</li></ul><h2 id="refreshes-your-wrist-with-wear-os-7">Refreshes your wrist with Wear OS 7 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1094px;"><p class="vanilla-image-block" style="padding-top:41.50%;"><img id="yywcZfrV5u8Y2nHvLtjP27" name="Wear OS 7" alt="Wear OS 7." src="https://cdn.mos.cms.futurecdn.net/yywcZfrV5u8Y2nHvLtjP27.jpg" mos="" align="middle" fullscreen="" width="1094" height="454" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Rounding out the massive wave of updates is Wear OS 7, which officially begins its rollout to eligible Pixel Watch devices today. This latest wearable platform update prioritizes seamless cross-device utility and smarter, real-time tracking directly on your wrist. There's also new personalized help features with Gemini Intelligence, which will be coming later.</p><ul><li><strong>Live Updates:</strong> Never miss a moment like the score of a World Cup game or waiting on an Uber ride with Live Updates that give you glanceable, real time details directly from your watch face.</li><li><strong>Cross-Device Control:</strong> Manage media playback across headphones or home speakers with a new media output switcher. For example, you can preview photos taken on a pair of smart glasses right from your wrist.</li><li><strong>Battery Boost:</strong> Deep, system-level power optimizations will give users upgrading from Wear OS 6 up to a 10% bump in battery life.</li><li><strong>Gemini Intelligence:</strong> Later this year, select Wear OS 7 devices will get a massive upgrade courtesy of Gemini Intelligence, transforming your smartwatch into a deeply personalized AI assistant. You'll be able to use natural language to build custom dashboards through Create My Widget.</li></ul><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORVvyO"></div>                            </div>                            <script src="https://kwizly.com/embed/ORVvyO.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/i-tested-the-new-ai-photo-clean-up-on-ios-27-vs-ios-26-and-its-shockingly-better">I tested the new AI photo Clean Up on iOS 27 vs iOS 26 — and it's shockingly better</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-beta-has-new-and-improved-dictation-software-i-tested-it-by-writing-this-whole-article-with-my-voice">iOS 27 beta has new and improved dictation software — I tested it by writing this whole article with my voice</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-and-macbook-ultra-teased-in-ios-27-and-macos-27-heres-what-we-know-so-far">iPhone Ultra and MacBook Ultra teased in iOS 27 and macOS 27 — here's what we know so far</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ That dead phone in your drawer could power the next AI data center ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Researchers at the University of California San Diego have shown how retired smartphones can be wired together into low-cost computing clusters. These small data centers built from devices that would otherwise become waste are taking new shape into something the team calls <a href="https://research.google/blog/a-low-carbon-computing-platform-from-your-retired-phones/" target="_blank">"phone cluster computing." </a></p><p>The process starts with stripping down the phone to its motherboard, removing the display, battery, and cameras — partly because some components, like batteries, aren't rated for a data-center environment. What's left gets networked into clusters that run real workloads.</p><p>The reason it works is that a phone most people call obsolete still has roughly half the compute of a modern server. Because of this, the UC San Diego team hopes to scale this up to a data center built from about 2,000 retired Pixel phones, giving hundreds of students and researchers low-cost, low-carbon cloud computing, with the full system expected to launch in Fall 2026. </p><h2 id="why-now">Why now  </h2><p>The amount of <a href="https://www.tomsguide.com/ai/i-kept-hearing-that-ai-data-centers-are-draining-towns-dry-so-i-looked-at-the-evidence">environmental disruption from Data Centers is astronomical</a>, which makes the timing of this research is particularly interesting.</p><p>Demand for AI services is fueling an <a href="https://www.tomsguide.com/ai/erin-brockovich-just-launched-an-ai-data-center-map-and-it-highlights-a-growing-problem-tech-giants-are-avoiding">unprecedented boom in data center construction</a>. Companies including Google, Microsoft, OpenAI and Amazon are investing heavily in new infrastructure to support increasingly powerful AI models.</p><p>At the same time, electronic waste continues to grow worldwide. Many consumers replace smartphones every two to three years, even though the underlying hardware often remains functional. Researchers argue that extending the useful life of those devices could reduce both electronic waste and the carbon footprint associated with manufacturing new computing equipment.</p><p>Google specifically highlighted the role of "embodied carbon" — the emissions generated during the manufacturing process. By reusing existing hardware rather than building new systems from scratch, researchers hope to reduce the environmental impact of computing infrastructure.</p><h2 id="not-every-prompt-needs-a-billion-dollar-data-center">Not every prompt needs a billion-dollar data center</h2><p>To be clear, nobody is suggesting that clusters of old smartphones will replace the massive facilities used to train frontier AI models. Training systems like ChatGPT or Gemini requires enormous amounts of specialized hardware, including advanced GPUs and purpose-built AI accelerators.</p><p>But researchers believe repurposed smartphones could be useful for smaller workloads, educational research, edge computing projects and localized data processing.</p><p>Previous experiments from <a href="https://www.eurekalert.org/news-releases/1086452" target="_blank">researchers at the University of Tartu</a> demonstrated that old smartphones can be repurposed into tiny data centers for applications ranging from marine-life monitoring to collecting real-time transportation data. Those prototypes reportedly cost roughly 8 euros per device to assemble, making them an inexpensive alternative for certain computing tasks.</p><h2 id="my-take">My take</h2><p>What I find most interesting about this research isn't the technology itself. The tech industry often assumes that progress means constantly replacing older devices with newer ones. Yet the processors inside many discarded smartphones remain remarkably capable.</p><p>As AI drives demand for ever-larger data centers, researchers are exploring the opposite idea of simply using old hardware more efficiently. This research suggests far more of them might make a difference than we realize.</p><a href="https://followamandacaswell2.netlify.app/" class="button button--large button--primary">Follow Amanda Caswell and stay ahead of the AI curve</a><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/ever-wonder-why-chatgpt-is-free-the-answer-is-far-more-calculated-than-you-might-think"><strong>Ever wonder why ChatGPT is free? The answer is far more calculated than you might think</strong></a></li><li><a href="https://www.tomsguide.com/ai/ever-wonder-why-chatgpt-is-free-the-answer-is-far-more-calculated-than-you-might-think"><strong>I use the ChatGPT 'Oak Tree' prompt when life gets chaotic — here's how it keeps me grounded</strong></a></li><li><a href="https://www.tomsguide.com/ai/i-asked-chatgpt-to-make-cleaning-less-overwhelming-these-7-prompts-actually-helped"><strong>I asked ChatGPT to make cleaning less overwhelming — these 7 prompts actually helped</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/that-dead-phone-in-your-drawer-could-power-the-next-ai-data-center</link>
                                                                            <description>
                            <![CDATA[ Researchers are turning discarded Google Pixel smartphones into miniature data centers, giving old devices a surprising second life while reducing e-waste and supporting low-cost computing. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NFTTyTNJTih7YBfFGSkVFe</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Y9GhejbYyxJUeQG6VezKoK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 15 Jun 2026 15:57:36 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[AI]]></category>
                                                    <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/zYjevim2q7FjQiefqpjZRB.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Y9GhejbYyxJUeQG6VezKoK-1280-80.jpg">
                                                            <media:credit><![CDATA[Shuttershock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Cracked and broken iPhone ]]></media:description>                                                            <media:text><![CDATA[Cracked and broken iPhone ]]></media:text>
                                <media:title type="plain"><![CDATA[Cracked and broken iPhone ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Y9GhejbYyxJUeQG6VezKoK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Researchers at the University of California San Diego have shown how retired smartphones can be wired together into low-cost computing clusters. These small data centers built from devices that would otherwise become waste are taking new shape into something the team calls <a href="https://research.google/blog/a-low-carbon-computing-platform-from-your-retired-phones/" target="_blank">"phone cluster computing." </a></p><p>The process starts with stripping down the phone to its motherboard, removing the display, battery, and cameras — partly because some components, like batteries, aren't rated for a data-center environment. What's left gets networked into clusters that run real workloads.</p><p>The reason it works is that a phone most people call obsolete still has roughly half the compute of a modern server. Because of this, the UC San Diego team hopes to scale this up to a data center built from about 2,000 retired Pixel phones, giving hundreds of students and researchers low-cost, low-carbon cloud computing, with the full system expected to launch in Fall 2026. </p><h2 id="why-now">Why now  </h2><p>The amount of <a href="https://www.tomsguide.com/ai/i-kept-hearing-that-ai-data-centers-are-draining-towns-dry-so-i-looked-at-the-evidence">environmental disruption from Data Centers is astronomical</a>, which makes the timing of this research is particularly interesting.</p><p>Demand for AI services is fueling an <a href="https://www.tomsguide.com/ai/erin-brockovich-just-launched-an-ai-data-center-map-and-it-highlights-a-growing-problem-tech-giants-are-avoiding">unprecedented boom in data center construction</a>. Companies including Google, Microsoft, OpenAI and Amazon are investing heavily in new infrastructure to support increasingly powerful AI models.</p><p>At the same time, electronic waste continues to grow worldwide. Many consumers replace smartphones every two to three years, even though the underlying hardware often remains functional. Researchers argue that extending the useful life of those devices could reduce both electronic waste and the carbon footprint associated with manufacturing new computing equipment.</p><p>Google specifically highlighted the role of "embodied carbon" — the emissions generated during the manufacturing process. By reusing existing hardware rather than building new systems from scratch, researchers hope to reduce the environmental impact of computing infrastructure.</p><h2 id="not-every-prompt-needs-a-billion-dollar-data-center">Not every prompt needs a billion-dollar data center</h2><p>To be clear, nobody is suggesting that clusters of old smartphones will replace the massive facilities used to train frontier AI models. Training systems like ChatGPT or Gemini requires enormous amounts of specialized hardware, including advanced GPUs and purpose-built AI accelerators.</p><p>But researchers believe repurposed smartphones could be useful for smaller workloads, educational research, edge computing projects and localized data processing.</p><p>Previous experiments from <a href="https://www.eurekalert.org/news-releases/1086452" target="_blank">researchers at the University of Tartu</a> demonstrated that old smartphones can be repurposed into tiny data centers for applications ranging from marine-life monitoring to collecting real-time transportation data. Those prototypes reportedly cost roughly 8 euros per device to assemble, making them an inexpensive alternative for certain computing tasks.</p><h2 id="my-take">My take</h2><p>What I find most interesting about this research isn't the technology itself. The tech industry often assumes that progress means constantly replacing older devices with newer ones. Yet the processors inside many discarded smartphones remain remarkably capable.</p><p>As AI drives demand for ever-larger data centers, researchers are exploring the opposite idea of simply using old hardware more efficiently. This research suggests far more of them might make a difference than we realize.</p><a href="https://followamandacaswell2.netlify.app/" class="button button--large button--primary">Follow Amanda Caswell and stay ahead of the AI curve</a><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/ever-wonder-why-chatgpt-is-free-the-answer-is-far-more-calculated-than-you-might-think"><strong>Ever wonder why ChatGPT is free? The answer is far more calculated than you might think</strong></a></li><li><a href="https://www.tomsguide.com/ai/ever-wonder-why-chatgpt-is-free-the-answer-is-far-more-calculated-than-you-might-think"><strong>I use the ChatGPT 'Oak Tree' prompt when life gets chaotic — here's how it keeps me grounded</strong></a></li><li><a href="https://www.tomsguide.com/ai/i-asked-chatgpt-to-make-cleaning-less-overwhelming-these-7-prompts-actually-helped"><strong>I asked ChatGPT to make cleaning less overwhelming — these 7 prompts actually helped</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I'm a new Pixel 10 Pro XL owner — these 12 accessories are currently in my shopping cart ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I recently upgraded my phone to the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review" target="_blank">Google Pixel 10 Pro XL</a>, and for the most part, I love it. There are a few <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-problems-all-the-issues-we-know-about-so-far" target="_blank">common Pixel 10 Pro XL problems</a> Google has yet to work out yet, but I like the phone's big, bright display, fantastic speakers, and great little array of cameras, especially considering failing camera software on my previous Galaxy phone was my biggest reason for upgrading in the first place.</p><p>And as with any new phone, it's not fully broken in until it's been outfitted with a ton of accessories. Some of the items I have on my wish list are protective musts, like a screen protector and a case. Other accessories help facilitate convenient charging, like Google's PixelSnap charger with a stand, or simply add to the overall experience of owning a Pixel phone, like a Pixel Watch or some Pixel Buds Pro 2.</p><p>If you also have a Pixel phone and you're looking for accessories to make it better, scroll on to see all my current top picks.  </p>        <div class="featured_product_block featured_block_hero" data-id="4f804cf3-037b-4bd5-82d8-04300e2ad273">            <a href="https://www.amazon.com/Eiavike-Compatible-Adjustable-Breathable-Wristbands/dp/B0CY9H22VZ" data-model-name="Stretchy Braided Band for Pixel Watch 4 (Violet)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/9ZyzpJbS999gUFfKbPL5yB.jpg" alt="Eiavike, Stretchy Braided Band for Pixel Watch 4 (Violet)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Eiavike</div>                                        <div class="featured__title">Stretchy Braided Band for Pixel Watch 4 (Violet)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5ddb00f6-5aac-4a96-ad90-e669390cc220">            <a href="https://www.amazon.com/Google-Pixel-Pro-Fingerprint-Bubble-Free/dp/B0FLPT2R8N" data-model-name="3-Pack of Screen Protectors" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/AFLxCtRpUgNoaMBeN5Yccm.jpg" alt="letosan, 3-Pack of Screen Protectors"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>letosan</div>                                        <div class="featured__title">3-Pack of Screen Protectors</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="46781f95-2913-4e19-bcc0-745e7ead682d">            <a href="https://www.amazon.com/Gooseneck-Bed-Phone-Holder-Mount/dp/B07S9JXQP2" data-model-name="Gooseneck Phone Holder (Black)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:129.87%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/NtwAhGwL5wDjNvz3Ej3mB6.jpg" alt="Lamicall Gooseneck Phone Holder for Bed - Cell Phone Mount Clamp Clip, Flexible Long Arm, Overhead Mount for Desk Headboard Bedside, Gifts for Iphone Air 17 Pro Max, 16 15 14 Pro Max and 4-7" Phone"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Lamicall</div>                                        <div class="featured__title">Gooseneck Phone Holder (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="246cbf01-6f3a-4320-ae6f-f4fcb023d21a">            <a href="https://www.amazon.com/MOSNOVO-Google-Buffertech-Military-Grade-Protection/dp/B0FJXP17WK" data-model-name="Pixel 10 Pro XL Phone Case (Eucalyptus)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QCEuge3BZrWT6kZachdqb5.jpg" alt="MOSNOVO, Pixel 10 Pro XL Phone Case (Eucalyptus)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>MOSNOVO</div>                                        <div class="featured__title">Pixel 10 Pro XL Phone Case (Eucalyptus)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="4e53ed80-2473-45a4-ab5d-5059f1887cea">            <a href="https://www.amazon.com/Google-USB-C-Power-Charger-Fast-Charging/dp/B0D8WK7N8K" data-model-name="45W USB-C Power Charger" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aobKZE9MQ2eDzgc6HrnAc7.jpg" alt="Google, 45W USB-C Power Charger"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">45W USB-C Power Charger</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="44c6a0f8-5e7d-4762-80ca-a55096027310">            <a href="https://www.amazon.com/Google-Pixelsnap-Stand-Pixel-Phone/dp/B0FGWQFX4C" data-model-name="PixelSnap Ring Stand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CgPZAAFpwjLvjgWM6EyZEJ.jpg" alt="Google, PixelSnap Phone Charger with Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">PixelSnap Ring Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="fbeb71cd-c327-4ef1-ac4d-9df3425e44d3">            <a href="https://www.amazon.com/URBAN-ARMOR-GEAR-Metropolis-Compatible/dp/B0GTFHCQMZ" data-model-name="Slim Magnetic Wallet (Olive PU)" 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/r6J6dEE5BD7dAqmViZSip9.jpg" alt="Urban Armor Gear Uag Slim Wallet Pu Vegan Leather 5 Cards Holder With Kickstand, Metropolis Magnetic Wallet Compatible With Magsafe for Iphone & Galaxy, Olive"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>URBAN ARMOR GEAR</div>                                        <div class="featured__title">Slim Magnetic Wallet (Olive PU)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2002afa8-1b4b-481a-8c0a-8ca12eae20af">            <a href="https://www.amazon.com/Google-Pixelsnap-Phone-Charger-Stand/dp/B0FGPKC21W" data-model-name="PixelSnap Phone Charger with Stand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/gYcKbEC9jWkjp77woyVtcL.jpg" alt="Google, PixelSnap Ring Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">PixelSnap Phone Charger with Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="55cf3e02-adbd-434d-beda-ce85792a0a88">            <a href="https://www.amazon.com/Anker-Ultra-Slim-Certified-Ultra-Fast-Compatible/dp/B0D7DKJ75M" data-model-name="10,000 mAh MagGo Power Bank" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ryodUREsGRJkcYTYGNsDdQ.jpg" alt="Anker, 10,000 mAh MagGo Power Bank"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Anker</div>                                        <div class="featured__title">10,000 mAh MagGo Power Bank</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1d15f3ed-8ff5-4252-9c71-7fdd596482e8">            <a href="https://www.amazon.com/Belkin-Compatible-Wireless-Charging-Convertible/dp/B0FBQZ5CYD" data-model-name="3-in-1 Qi2 Wireless Charging Station (Black)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wFuQRGtpcgADSPvNCfYDME.jpg" alt="Belkin Magsafe Charger Compatible, 3-In-1 Qi2 15w Wireless Charging Station, Convertible Wireless Charger for Iphone 17, Apple Watch, Airpods, Pixel 10, Phone Stand for Travel W/ 36w Adapter - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Belkin</div>                                        <div class="featured__title">3-in-1 Qi2 Wireless Charging Station (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="cf48914c-170e-4f3a-b3bf-63286708b27d">            <a href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79ND3N7" data-model-name="Google Pixel Buds Pro 2 - Wireless Earbuds With Active Noise Cancellation – Bluetooth Headphones - Hazel" 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/XtopyXPVFXSETVxdwC7snk.jpg" alt="Google Pixel Buds Pro 2 - Wireless Earbuds With Active Noise Cancellation – Bluetooth Headphones - Hazel"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Buds Pro 2 - Wireless Earbuds With Active Noise Cancellation – Bluetooth Headphones - Hazel</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ed8e8848-8d98-40e0-8170-d1abf1b102f4">            <a href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0FJVXV8DQ" data-model-name="Pixel Watch 4 (41mm)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/JJymdrPtDWcWpEv3yrmxYA.jpg" alt="Google, Pixel Watch 4 (41mm)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Pixel Watch 4 (41mm)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/im-a-new-pixel-10-pro-xl-owner-these-12-accessories-are-currently-in-my-amazon-cart</link>
                                                                            <description>
                            <![CDATA[ I'll be adding a protective case, a pair of earbuds, a charging station, and a slew of other helpful accessories to level up my Pixel. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">k5kuPSKWG7nDpdG6oLbn7A</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/oYjsHF3ytdAnaJn9KJ9fDm-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 11 Jun 2026 13:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Sarah Chaney ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/suPHU879S6aTM4FZ2htzD5.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Sarah Chaney is a freelance tech writer with 4 years of experience across multiple outlets, including How-To Geek, MakeUseOf, SlashGear, Laptop Mag, and of course, Tom&#039;s Guide. She loves reviewing the latest gadgets, from inventive robot vacuums to new laptops, wearables, and anything PC-related. When she&#039;s not writing, she&#039;s probably playing a video game, exploring the outdoors, or listening to her current favorite song or album on repeat.&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/oYjsHF3ytdAnaJn9KJ9fDm-1280-80.jpg">
                                                            <media:credit><![CDATA[Google, Anker / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel accessories on yellow background]]></media:description>                                                            <media:text><![CDATA[Google Pixel accessories on yellow background]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel accessories on yellow background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/oYjsHF3ytdAnaJn9KJ9fDm-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I recently upgraded my phone to the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review" target="_blank">Google Pixel 10 Pro XL</a>, and for the most part, I love it. There are a few <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-problems-all-the-issues-we-know-about-so-far" target="_blank">common Pixel 10 Pro XL problems</a> Google has yet to work out yet, but I like the phone's big, bright display, fantastic speakers, and great little array of cameras, especially considering failing camera software on my previous Galaxy phone was my biggest reason for upgrading in the first place.</p><p>And as with any new phone, it's not fully broken in until it's been outfitted with a ton of accessories. Some of the items I have on my wish list are protective musts, like a screen protector and a case. Other accessories help facilitate convenient charging, like Google's PixelSnap charger with a stand, or simply add to the overall experience of owning a Pixel phone, like a Pixel Watch or some Pixel Buds Pro 2.</p><p>If you also have a Pixel phone and you're looking for accessories to make it better, scroll on to see all my current top picks.  </p>        <div class="featured_product_block featured_block_hero" data-id="4f804cf3-037b-4bd5-82d8-04300e2ad273">            <a href="https://www.amazon.com/Eiavike-Compatible-Adjustable-Breathable-Wristbands/dp/B0CY9H22VZ" data-model-name="Stretchy Braided Band for Pixel Watch 4 (Violet)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/9ZyzpJbS999gUFfKbPL5yB.jpg" alt="Eiavike, Stretchy Braided Band for Pixel Watch 4 (Violet)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Eiavike</div>                                        <div class="featured__title">Stretchy Braided Band for Pixel Watch 4 (Violet)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5ddb00f6-5aac-4a96-ad90-e669390cc220">            <a href="https://www.amazon.com/Google-Pixel-Pro-Fingerprint-Bubble-Free/dp/B0FLPT2R8N" data-model-name="3-Pack of Screen Protectors" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/AFLxCtRpUgNoaMBeN5Yccm.jpg" alt="letosan, 3-Pack of Screen Protectors"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>letosan</div>                                        <div class="featured__title">3-Pack of Screen Protectors</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="46781f95-2913-4e19-bcc0-745e7ead682d">            <a href="https://www.amazon.com/Gooseneck-Bed-Phone-Holder-Mount/dp/B07S9JXQP2" data-model-name="Gooseneck Phone Holder (Black)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:129.87%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/NtwAhGwL5wDjNvz3Ej3mB6.jpg" alt="Lamicall Gooseneck Phone Holder for Bed - Cell Phone Mount Clamp Clip, Flexible Long Arm, Overhead Mount for Desk Headboard Bedside, Gifts for Iphone Air 17 Pro Max, 16 15 14 Pro Max and 4-7" Phone"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Lamicall</div>                                        <div class="featured__title">Gooseneck Phone Holder (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="246cbf01-6f3a-4320-ae6f-f4fcb023d21a">            <a href="https://www.amazon.com/MOSNOVO-Google-Buffertech-Military-Grade-Protection/dp/B0FJXP17WK" data-model-name="Pixel 10 Pro XL Phone Case (Eucalyptus)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QCEuge3BZrWT6kZachdqb5.jpg" alt="MOSNOVO, Pixel 10 Pro XL Phone Case (Eucalyptus)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>MOSNOVO</div>                                        <div class="featured__title">Pixel 10 Pro XL Phone Case (Eucalyptus)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="4e53ed80-2473-45a4-ab5d-5059f1887cea">            <a href="https://www.amazon.com/Google-USB-C-Power-Charger-Fast-Charging/dp/B0D8WK7N8K" data-model-name="45W USB-C Power Charger" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aobKZE9MQ2eDzgc6HrnAc7.jpg" alt="Google, 45W USB-C Power Charger"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">45W USB-C Power Charger</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="44c6a0f8-5e7d-4762-80ca-a55096027310">            <a href="https://www.amazon.com/Google-Pixelsnap-Stand-Pixel-Phone/dp/B0FGWQFX4C" data-model-name="PixelSnap Ring Stand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CgPZAAFpwjLvjgWM6EyZEJ.jpg" alt="Google, PixelSnap Phone Charger with Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">PixelSnap Ring Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="fbeb71cd-c327-4ef1-ac4d-9df3425e44d3">            <a href="https://www.amazon.com/URBAN-ARMOR-GEAR-Metropolis-Compatible/dp/B0GTFHCQMZ" data-model-name="Slim Magnetic Wallet (Olive PU)" 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/r6J6dEE5BD7dAqmViZSip9.jpg" alt="Urban Armor Gear Uag Slim Wallet Pu Vegan Leather 5 Cards Holder With Kickstand, Metropolis Magnetic Wallet Compatible With Magsafe for Iphone & Galaxy, Olive"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>URBAN ARMOR GEAR</div>                                        <div class="featured__title">Slim Magnetic Wallet (Olive PU)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2002afa8-1b4b-481a-8c0a-8ca12eae20af">            <a href="https://www.amazon.com/Google-Pixelsnap-Phone-Charger-Stand/dp/B0FGPKC21W" data-model-name="PixelSnap Phone Charger with Stand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/gYcKbEC9jWkjp77woyVtcL.jpg" alt="Google, PixelSnap Ring Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">PixelSnap Phone Charger with Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="55cf3e02-adbd-434d-beda-ce85792a0a88">            <a href="https://www.amazon.com/Anker-Ultra-Slim-Certified-Ultra-Fast-Compatible/dp/B0D7DKJ75M" data-model-name="10,000 mAh MagGo Power Bank" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ryodUREsGRJkcYTYGNsDdQ.jpg" alt="Anker, 10,000 mAh MagGo Power Bank"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Anker</div>                                        <div class="featured__title">10,000 mAh MagGo Power Bank</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1d15f3ed-8ff5-4252-9c71-7fdd596482e8">            <a href="https://www.amazon.com/Belkin-Compatible-Wireless-Charging-Convertible/dp/B0FBQZ5CYD" data-model-name="3-in-1 Qi2 Wireless Charging Station (Black)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wFuQRGtpcgADSPvNCfYDME.jpg" alt="Belkin Magsafe Charger Compatible, 3-In-1 Qi2 15w Wireless Charging Station, Convertible Wireless Charger for Iphone 17, Apple Watch, Airpods, Pixel 10, Phone Stand for Travel W/ 36w Adapter - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Belkin</div>                                        <div class="featured__title">3-in-1 Qi2 Wireless Charging Station (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="cf48914c-170e-4f3a-b3bf-63286708b27d">            <a href="https://www.amazon.com/Google-Pixel-Buds-Pro-Cancellation/dp/B0D79ND3N7" data-model-name="Google Pixel Buds Pro 2 - Wireless Earbuds With Active Noise Cancellation – Bluetooth Headphones - Hazel" 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/XtopyXPVFXSETVxdwC7snk.jpg" alt="Google Pixel Buds Pro 2 - Wireless Earbuds With Active Noise Cancellation – Bluetooth Headphones - Hazel"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Google Pixel Buds Pro 2 - Wireless Earbuds With Active Noise Cancellation – Bluetooth Headphones - Hazel</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ed8e8848-8d98-40e0-8170-d1abf1b102f4">            <a href="https://www.amazon.com/Google-Pixel-Watch-41mm-Smartwatch/dp/B0FJVXV8DQ" data-model-name="Pixel Watch 4 (41mm)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/JJymdrPtDWcWpEv3yrmxYA.jpg" alt="Google, Pixel Watch 4 (41mm)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Google</div>                                        <div class="featured__title">Pixel Watch 4 (41mm)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Biggest Google I/O 2026 announcements — Gemini Spark, Intelligent Eyewear glasses and more ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="live-content"><p>The Google I/O 2026 keynote has come and gone, and there's no kidding about Gemini being top priority. While a vast majority of it was dedicated to new <a href="https://www.tomsguide.com/ai/google-just-launched-gemini-3-5-flash-and-gemini-spark-changes-what-ai-assistants-can-do">Gemini models</a>, Google saved the tail end of the keynote to show off new <a href="https://www.tomsguide.com/computing/smart-glasses/forget-meta-ray-bans-samsungs-intelligent-eyewear-glasses-just-launched-at-google-i-o-and-theyre-coming-this-fall">"intelligent eyewear" devices</a> that are coming out this fall.</p><p>In the past, the event has been tailored to show off new tools and features for its other platforms, like <a href="https://www.tomsguide.com/phones/android-phones/android-17-changes-worth-paying-attention-to">Android 17</a> and Android Auto, but it's interesting how AI continues to be the big focus, especially with Gemini.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gK4r9d" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><p>Despite being shown off at last week's Android Show, there wasn't any time devoted to other <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebook</a> laptops that Google previously teased from other hardware makers. </p><p>Here's all the biggest announcements from Google I/O 2026 .</p><h2 class="article-body__section" id="section-biggest-google-i-o-2026-announcements"><span>Biggest Google I/O 2026 Announcements</span></h2><ul><li><a href="https://www.tomsguide.com/ai/google-gemini/google-search-box-just-got-the-biggest-makeover-in-nearly-30-years" target="_blank">Google Search just got the biggest upgrade in nearly 30 years</a></li><li><a href="https://www.tomsguide.com/ai/google-gemini/google-unveils-gemini-spark-a-24-7-personal-ai-agent-that-could-be-a-game-changer-for-agentic-ai" target="_blank">Google unveils Gemini Spark — a '24/7 personal AI agent' </a></li><li><a href="https://www.tomsguide.com/computing/smart-glasses/forget-meta-ray-bans-samsungs-intelligent-eyewear-glasses-just-launched-at-google-i-o-and-theyre-coming-this-fall" target="_blank">Samsung's 'Intelligent Eyewear' glasses just launched at Google I/O, and they're coming this fall</a></li><li><a href="https://www.tomsguide.com/ai/google-just-launched-gemini-3-5-flash-and-gemini-spark-changes-what-ai-assistants-can-do" target="_blank">Google just launched Gemini 3.5 Flash — here’s all the upgrades</a></li><li><a href="https://www.tomsguide.com/tech-events/googles-new-universal-cart-uses-ai-to-track-deals-and-shop-across-apps" target="_blank">Google’s new 'Universal Cart' uses AI to track deals and shop across apps</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/ask-youtube-entirely-reimagines-how-you-find-videos-with-a-conversational-search-experience-heres-how-it-works" target="_blank">Ask YouTube 'entirely reimagines' how you find videos — how it works</a></li><li><a href="https://www.tomsguide.com/ai/googles-new-usd100-ai-ultra-plan-just-changed-the-ai-race-and-gemini-spark-is-the-biggest-reason-why" target="_blank">Google’s new $100 AI Ultra plan just changed the AI race</a></li></ul><h2 class="article-body__section" id="section-how-to-watch-google-i-o-2026"><span>How to watch Google I/O 2026</span></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/wYSncx9zLIU" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-google-i-o-2026-live-updates"><span>Google I/O 2026 — Live updates</span></h3></div><div class="live-content"><time datetime="2026-05-19T14:50:32+00:00">May 19, 2026 – 10:50 AM</time><h2 id="google-i-o-starts-soon">Google I/O starts soon!</h2><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="2ebQek8QDoVdsNaNuYPBxn" name="Google I/O 2026 live" alt="Google I/O live blog." src="https://cdn.mos.cms.futurecdn.net/2ebQek8QDoVdsNaNuYPBxn.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 / Google)</span></figcaption></figure><p>We're just a couple of hours away from the official news-dropping madness getting underway. If you're a fan of Android, Gemini or even if you just casually use Google products like Search, there's sure to be something to get you excited at the event once it kicks off. </p><p>Be sure to keep yourself locked to this live blog, as we'll bring you every important piece of information as it happens. </p></div><div class="live-content"><time datetime="2026-05-19T14:57:07+00:00">May 19, 2026 – 10:57 AM</time><h2 id="are-you-excited-for-i-o">Are you excited for I/O?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O9RaMX"></div>                            </div>                            <script src="https://kwizly.com/embed/O9RaMX.js" async></script><p>Google I/O is about to start and we're excited to see what the company has in store for us. But what are you most excited about? </p><p>Hit the poll above and let your voice be heard! </p></div><div class="live-content"><time datetime="2026-05-19T14:59:49+00:00">May 19, 2026 – 10:59 AM</time><h2 id="tom-s-guide-eic-weighs-in">Tom's Guide EIC weighs in</h2><p>"I'm personally excited to see the new Google and Samsung glasses and how they'll stand out versus Meta Ray-Ban. Hopefully, we'll learn more about unique features and see the designs from Warby Parker and Gentle Monster. Just keep in mind that these glasses won't have a display..." said Tom's Guide Global Editor in Chief Mark Spoonauer. </p></div><div class="live-content"><time datetime="2026-05-19T15:07:50+00:00">May 19, 2026 – 11:07 AM</time><h2 id="gemini-remy-could-make-its-debut">Gemini Remy could make its debut</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wDUATUTpPSFY8y4n9UB4De" name="gemini.shutterstock_2570446691" alt="Gemini logo on smartphone with the Google logo behind" src="https://cdn.mos.cms.futurecdn.net/wDUATUTpPSFY8y4n9UB4De.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Google has kept quiet about what I/O will have to offer, but it has teased a future of agentic AI. This means we may see it unveil some details about "Remy," the codename attached to Google's own personal AI agent.</p><p>According to <a href="https://www.businessinsider.com/google-ai-agent-openclaw-remy-gemini-assistant-2026-5" target="_blank">reports</a>, Remy is "your 24/7 personal agent for work, school and daily life, powered by Gemini." It will apparently be able to interact with other Google services and be more advanced than the agentic features Google has already started rolling out to the Gemini app. That means handling tasks proactively, learning your own preferences, and keeping track of things that matter.</p></div><div class="live-content"><time datetime="2026-05-19T15:11:26+00:00">May 19, 2026 – 11:11 AM</time><h2 id="some-changes-have-already-come-to-gemini-app">Some changes have already come to Gemini app</h2><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="d6iRrNAQeYiESHsFCyjoUK" name="shutterstock_2604883871-2" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/d6iRrNAQeYiESHsFCyjoUK.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: Shutterstock)</span></figcaption></figure><p>Gemini is likely to get the lion's share of reveals at I/O 2026, but eagle-eyed users have already spotted some <a href="https://9to5google.com/2026/05/17/gemini-app-thinking-level/" target="_blank"><u>changes</u></a> rolling out to the Gemini app. There seems to be a new "Thinking level" menu rolling out to the app's model picker, with "standard" and "extended" options added to the Fast and Pro models.</p><p>The Gemini app also seems to be prepping more integrations with third-party apps, with support documents suggesting support for Canva, Instacart, and OpenTable is on the way. Which means Gemini should be able to control these apps on your behalf, based on prompts you give it.</p><p>No doubt we'll hear more during the I/O conference.</p></div><div class="live-content"><time datetime="2026-05-19T15:27:49+00:00">May 19, 2026 – 11:27 AM</time><h2 id="gemini-3-5-coming-to-i-o">Gemini 3.5 coming to I/O?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:970px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="khFPxsQnHBMwjXkGCXtWB8" name="Gemini" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/khFPxsQnHBMwjXkGCXtWB8.webp" mos="" align="middle" fullscreen="" width="970" height="546" 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>A social media post by a Google DeepMind employee seems to confirm that Gemini 3.5 exists. This further bumps expectations that Google will announce the new model at I/O 2026, but we'll have to wait and see. </p><p><a href="https://x.com/scaling01/status/2056709799128035389" target="_blank">Pricing has allegedly been posted for the new AI model on X</a>, further making us think it'll launch today.</p></div><div class="live-content"><time datetime="2026-05-19T15:29:09+00:00">May 19, 2026 – 11:29 AM</time><h2 id="what-about-the-new-google-home-speaker">What about the new Google Home speaker?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2539px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="anNgf2v7aByT5acswDxKDN" name="Google Home Speaker leak" alt="Google Home speaker leaked during made by Google event" src="https://cdn.mos.cms.futurecdn.net/anNgf2v7aByT5acswDxKDN.jpg" mos="" align="middle" fullscreen="" width="2539" height="1428" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>While I/O may not be a hardware-focused event, there is still one lingering piece of hardware that hasn't been released — and now would be the perfect time to reveal an official date.</p><p>I'm talking, of course, about the <a href="https://www.tomsguide.com/home/smart-home/googles-next-gemini-powered-home-speaker-actually-appeared-during-pixel-10-launch-what-we-know">Google Home Speaker that was first teased last year</a>. Google said it would be arriving in Spring 2026. Since Spring is currently ongoing, it's about time we got some concrete information. The last thing we need is for this speaker to become the next Galaxy Home.</p></div><div class="live-content"><time datetime="2026-05-19T15:33:23+00:00">May 19, 2026 – 11:33 AM</time><h2 id="timing-reminder">Timing reminder!</h2><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="9Bssztbgz37fNNNa4UEGvd" name="Google IO.GettyImages-2215577882" alt="Google CEO" src="https://cdn.mos.cms.futurecdn.net/9Bssztbgz37fNNNa4UEGvd.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p>In case you forgot, Google's I/O 2026 keynote kicks off at 10 a.m. PT / 1 p.m. ET / 6 p.m. BST on May 19 (that's today), and you can tune into the event through the YouTube stream embedded above.</p><p>Of course, the best thing you can do is keep this live blog open, as not only will we tell you everything as it happens, but we'll explain why you should care about each bit of news.</p></div><div class="live-content"><time datetime="2026-05-19T15:52:30+00:00">May 19, 2026 – 11:52 AM</time><h2 id="googlebook-s-os-needs-a-name">Googlebook's OS needs a 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:4096px;"><p class="vanilla-image-block" style="padding-top:74.27%;"><img id="uCx95t8GvqBqx2ARtBSDuH" name="Googlebook-4" alt="Googlebook" src="https://cdn.mos.cms.futurecdn.net/uCx95t8GvqBqx2ARtBSDuH.jpg" mos="" align="middle" fullscreen="" width="4096" height="3042" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google may have revealed a bunch of details about Googlebooks, including the fact that they will be running on an Android-based operating system, but there's still a bunch we don't know. Like a name, because so far we've just been calling it Googlebook OS.</p><p>Rumors suggested that the <a href="https://www.tomsguide.com/computing/chromebooks/aluminium-os-tipped-to-be-googles-new-android-based-pc-operating-system">name AluminumOS could be on the cards</a>, but that might just have been a codename. Now that Googlebooks are confirmed, it's about time Google cleared the rest of those little details up.</p></div><div class="live-content"><time datetime="2026-05-19T16:02:50+00:00">May 19, 2026 – 12:02 PM</time><h2 id="smart-glasses-may-be-the-exception">Smart glasses may be the exception</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1154px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="BTrEwaC2NrPW5vL67a8Y2n" name="Exclusive-Samsung-Galaxy-Glasses-AH-1154x649" alt="Leaked render of Samsung Galaxy Glasses" src="https://cdn.mos.cms.futurecdn.net/BTrEwaC2NrPW5vL67a8Y2n.jpg" mos="" align="middle" fullscreen="" width="1154" height="649" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks / Android Headlines)</span></figcaption></figure><p>While we don't expect to see any mobile hardware at I/O, Google has confirmed we will be seeing more on the smart glasses front. We don't know a lot more than the fact smart glasses will be at I/O in some capacity, but there's a chance we may get our first details about Android XR-powered glasses you can actually buy.</p><p>Rumor has it that <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-just-tipped-for-july-22-launch-at-unpacked-and-it-could-be-joined-by-galaxy-glasses">Samsung's Galaxy Glasses will launch at Galaxy Unpacked in July</a>, and considering Google's close partnership with Samsung, there's a good chance we'll get some news about the AI specs. Though I can't imagine Samsung will allow a full reveal at someone else's event, when it's own is only a couple of months away.</p></div><div class="live-content"><time datetime="2026-05-19T16:17:29+00:00">May 19, 2026 – 12:17 PM</time><h2 id="live-stream-has-started">Live stream has started</h2><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="PoFEetXWxUkh8hWpe4YrCa" name="Google I_O '26 Keynote 17-16 screenshot" alt="The pre-show before the Google I/O 2026 keynote" src="https://cdn.mos.cms.futurecdn.net/PoFEetXWxUkh8hWpe4YrCa.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We're less than an hour out from the start of the Google I/O 2026 keynote. However, up on YouTube, the livestream has already started. We're currently being serenaded by Jellectronica AI music created by Google's Lyria 3. Meanwhile, a video feed shows jellyfish from the Monterey Bay Aquarium who were tracked using Google's AI object detection tech. </p></div><div class="live-content"><time datetime="2026-05-19T16:29:16+00:00">May 19, 2026 – 12:29 PM</time><h2 id="we-re-on-the-ground-live">We're on the ground live</h2><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="q6KgdbkbrAjHznsNLnjBCW" name="IMG_8787" alt="A shot from across the street showing the exterior of Google's I/O 2026 event" src="https://cdn.mos.cms.futurecdn.net/q6KgdbkbrAjHznsNLnjBCW.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: Tom's Guide)</span></figcaption></figure><p>Our own Jason England and Paul Antill have just arrived at the Shoreline Amphitheatre in Mountain View, California. We'll have more live coverage of the event once they make their way inside to get ready for the Google I/O keynote which is set to start in 30 minutes. So stay tuned!</p></div><div class="live-content"><time datetime="2026-05-19T16:38:35+00:00">May 19, 2026 – 12:38 PM</time><h2 id="and-we-re-in">And we're in</h2><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="iBoXCx88YKuStrf3kWS9D4" name="IMG_8796" alt="Jason England and Paul Antill in front of the I/O statue at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/iBoXCx88YKuStrf3kWS9D4.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: Tom's Guide)</span></figcaption></figure><p>Jason and Paul have now made it inside Google I/O and are getting ready to cover the keynote live from Mountain View. I just spoke with Paul on the phone and he and Jason are currently making their way to their seats. From what I could hear, things sounded pretty busy at the Shoreline Amphitheatre with less than 20 minutes to go before the keynote kicks off.</p></div><div class="live-content"><time datetime="2026-05-19T16:43:03+00:00">May 19, 2026 – 12:43 PM</time><h2 id="game-together-while-you-wait">Game together while you wait</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Jy6DM793czxqdrPze7TQfM.png" alt="A series of screenshot from the Google I/O 2026 livestream showing the hosts playing the game Infinite Scaler" /><figcaption><small role="credit">Google</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bY7FfdyNmzaEnZVZ87ueuM.png" alt="A series of screenshot from the Google I/O 2026 livestream showing the hosts playing the game Infinite Scaler" /><figcaption><small role="credit">Google</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/M8397naDfw7Duz4rmn82tM.png" alt="A series of screenshot from the Google I/O 2026 livestream showing the hosts playing the game Infinite Scaler" /><figcaption><small role="credit">Google</small></figcaption></figure></figure><p>The hosts up on stage at Google I/O are currently playing an interactive, browser-based side scrolling game called Infinite Scaler before the keynote starts. In the game, you make your way up an ever growing tower by moving left and right and jumping on pads as you dodge lasers beams, collect tokens and more. It seems fairly simple but it's neat how each room is created by Nano Banana. You can scan the QR code pictured above if you want to give it a try for yourself.</p></div><div class="live-content"><time datetime="2026-05-19T16:49:09+00:00">May 19, 2026 – 12:49 PM</time><h2 id="google-i-o-2026-keynote-countdown-has-begun-what-do-you-expect">Google I/O 2026 keynote countdown has begun! What do you expect?</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/CtRhU7uTfjNQdWGAhUgMgQ.jpg" alt="Google I/O 2026." /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sy494zMW2jbSKgXfMxjpRQ.jpg" alt="Google I/O 2026." /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/85YZTzEtTkhzAqYkvUbPBR.jpg" alt="Google I/O 2026." /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Howdy folks! <a href="https://www.tomsguide.com/author/john-velasco">John Velasco</a> here for Tom’s Guide and I’ll be taking you all through everything that’s going on with the Google I/O 2026 keynote. Last week’s Android Show certainly delivered a lot of buzz with announcements around Android Auto, Gemini Intelligence, Googlebooks, and more.</p><p>My colleagues <a href="https://www.tomsguide.com/author/jason-england">Jason England</a> and <a href="https://www.tomsguide.com/author/paul-antill">Paul Antill</a> are on the ground to get first hands-on experiences with whatever else new that Google reveals at its keynote? I’ve been covering Google I/O since the very first one — and while it’s always been an Android first affair — we’ve seen how it’s expanded to other exciting areas.</p></div><div class="live-content"><time datetime="2026-05-19T17:02:37+00:00">May 19, 2026 – 1:02 PM</time><h2 id="take-a-second-at-how-far-we-ve-come">'Take a second at how far we've come'</h2><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="LLB4fMFTDszCLVhLCrgnjJ" name="Google I_O '26 Keynote 1-5-36 screenshot" alt="People making things with Gemini" src="https://cdn.mos.cms.futurecdn.net/LLB4fMFTDszCLVhLCrgnjJ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google I/O 2026 kicks off with another inspirational video showing the impact of Google's products and services, with real world implications. It concludes saying, "let's make something that matters"</p></div><div class="live-content"><time datetime="2026-05-19T17:05:34+00:00">May 19, 2026 – 1:05 PM</time><h2 id="9-7-trillion-tokens-a-month-processed">9.7 trillion tokens a month processed</h2><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="YwBhht5LcjQuXSZySAzCdZ" name="Google I_O '26 Keynote 1-6-54 screenshot" alt="Sundar Pichai closeup at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/YwBhht5LcjQuXSZySAzCdZ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's Sundar Pichai steps out onto the stage with opening remarks, including a funny clip of his highlights over the past year.</p><p>Pichai goes onto explain how Gemini is being access by more people than ever, with 9.7 trillion tokens a month.</p></div><div class="live-content"><time datetime="2026-05-19T17:08:50+00:00">May 19, 2026 – 1:08 PM</time><h2 id="gemini-app-usage-continues-to-grow-at-a-rapid-rate">Gemini app usage continues to grow at a rapid rate</h2><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="72sg4ss3MMGxVpgA9Qva67" name="Google I_O '26 Keynote 1-10-48 screenshot" alt="AI Overviews monthly active users at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/72sg4ss3MMGxVpgA9Qva67.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Gemini app usage continues to grow and the numbers shared by Sundar Pichai is proof of that, surpassing 900 million active users with the Gemini app, which is 2x growth over the past year.</p></div><div class="live-content"><time datetime="2026-05-19T17:10:49+00:00">May 19, 2026 – 1:10 PM</time><h2 id="ask-youtube-rolling-out-makes-video-searches-better">Ask YouTube rolling out — makes video searches better</h2><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="nSMAbrWEpAsTAFZUg9FgwG" name="Google I_O '26 Keynote 1-12-39 screenshot" alt="Ask YouTube at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/nSMAbrWEpAsTAFZUg9FgwG.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's rolling out a new feature with YouTube called "Ask YouTube," which intelligently finds videos with the help of AI. These are digestible clips that are to the point, based on your questions and queries.</p></div><div class="live-content"><time datetime="2026-05-19T17:12:44+00:00">May 19, 2026 – 1:12 PM</time><h2 id="docs-live-makes-editing-easier-with-ai">Docs Live makes editing easier with AI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="K3r3JcnrcFRDVGZBe3XiPb" name="Google I_O '26 Keynote 1-15-19 screenshot" alt="A person browsing through a Docs Live chat at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/K3r3JcnrcFRDVGZBe3XiPb.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Docs Live is another powerful tool that makes creating documents easier with your voice using AI help. The demo looked pretty convincing at how well it functions.</p></div><div class="live-content"><time datetime="2026-05-19T17:15:40+00:00">May 19, 2026 – 1:15 PM</time><h2 id="tpus-make-a-huge-impact-to-processing-tokens">TPUs make a huge impact to processing tokens</h2><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="wzkxWuvf3uDrt8v84mUHMm" name="Google I_O '26 Keynote 1-17-3 screenshot" alt="Google's TPUs over the years" src="https://cdn.mos.cms.futurecdn.net/wzkxWuvf3uDrt8v84mUHMm.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Most consumers might not think much about how tokens are processed, but the numbers are staggering. With more people leaning on AI, Google's investing in more TPU development to keep up pace, which as Sundar Pichai bluntly says, makes a huge difference with latency.</p></div><div class="live-content"><time datetime="2026-05-19T17:19:42+00:00">May 19, 2026 – 1:19 PM</time><h2 id="gemini-omni-is-a-new-model-that-s-multi-modal">Gemini Omni is a new model that's multi-modal</h2><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="YCgxEMFNUkpv3y2cvUW6fT" name="Google I_O '26 Keynote 1-21-23 screenshot" alt="Demis Hassabis at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/YCgxEMFNUkpv3y2cvUW6fT.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Demis Hassabis is now on stage to talk more about models, with a focus on World models, which will be used to train AI bots. He goes on to talk about its latest model: Gemini Omni,</p><p>With Omni, its multi-modal capability can help generate videos using prompts, but it can be further refined through subsequent steps. You can edit videos with conversational languages, taking a simple selfie and transforming it to something else. </p></div><div class="live-content"><time datetime="2026-05-19T17:23:56+00:00">May 19, 2026 – 1:23 PM</time><h2 id="ai-content-verification-is-coming-to-chrome">AI content verification is coming to Chrome</h2><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="bcvsNrPxJceUm6HYSjFsLH" name="Google I_O '26 Keynote 1-26-55 screenshot" alt="AI detection rolling out to Chrome" src="https://cdn.mos.cms.futurecdn.net/bcvsNrPxJceUm6HYSjFsLH.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>This new feature can help better tell you if content you see is generated with AI or not. OpenAI is now going to be using Google's content verifcation, in addition to other partners.</p></div><div class="live-content"><time datetime="2026-05-19T17:25:54+00:00">May 19, 2026 – 1:25 PM</time><h2 id="gemini-3-5-flash-is-even-faster-versus-previous-models">Gemini 3.5 Flash is even faster versus previous models</h2><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="RPxAE8exA3t9jCxDMkcqHR" name="Google I_O '26 Keynote 1-28-14 screenshot" alt="Gemini 3 Models at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/RPxAE8exA3t9jCxDMkcqHR.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Gemini 3.5 Flash  combines frontier intelligence with actions. This model has been tweaked to work much faster with its output speed, beating other models. It's 4x faster in fact.</p></div><div class="live-content"><time datetime="2026-05-19T17:27:37+00:00">May 19, 2026 – 1:27 PM</time><p>Google Antigravity </p></div><div class="live-content"><time datetime="2026-05-19T17:33:33+00:00">May 19, 2026 – 1:33 PM</time><h2 id="google-antigravity-updates-make-programming-easier-for-developers">Google Antigravity updates make programming easier for developers</h2><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="zKRjLvKeqParDcZpBLGYyn" name="Google I_O '26 Keynote 1-31-35 screenshot" alt="Antigravity at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/zKRjLvKeqParDcZpBLGYyn.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Updates to Google Antigravity aims to assist programmers and developers with complex coding tasks. With this update, it's helping coders to create operating systems, including the ability to play Doom.</p></div><div class="live-content"><time datetime="2026-05-19T17:36:46+00:00">May 19, 2026 – 1:36 PM</time><h2 id="gemini-spark-handles-your-digital-life">Gemini Spark handles your digital 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="4zp4feXgDq5KFGgqcYtYBF" name="Google I_O '26 Keynote 1-40-18 screenshot" alt="Gemini Spark reveal at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/4zp4feXgDq5KFGgqcYtYBF.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Gemini Spark is coming to the Gemini app, a persoanl agent that handles you digital life. It runs on virtual machines in Google Cloud and works 24/7. It's powered by Gemini 3.5.</p></div><div class="live-content"><time datetime="2026-05-19T17:39:45+00:00">May 19, 2026 – 1:39 PM</time><h2 id="collaboration-is-going-to-get-a-big-boost-with-gemini-spark">Collaboration is going to get a big boost with Gemini Spark</h2><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="PqEqgbXvYWLptzDVh6WQpR" name="Google I_O '26 Keynote 1-42-38 screenshot" alt="Gemini Spark demo at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/PqEqgbXvYWLptzDVh6WQpR.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The live demo of Gemini Spark shows how this agent works across different services, like Google Docs, Gmail, and more, all to populate details and information. One example Google shows is trying to organize a party with Gemini Spark, which populates an RSVP tracker created in Google Sheets, including real time changes to it. Spark can also send follow up reminders to people who haven't RSVPed.</p></div><div class="live-content"><time datetime="2026-05-19T17:41:48+00:00">May 19, 2026 – 1:41 PM</time><h2 id="gemini-spark-works-across-devices-iphone-and-android-in-the-background">Gemini Spark works across devices, iPhone and Android, in the background</h2><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="79z8fWB68chyiyasbnkQ9f" name="Google I_O '26 Keynote 1-44-43 screenshot" alt="Gemini Spark on mobile at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/79z8fWB68chyiyasbnkQ9f.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Spark works on Android and iPhone, which syncs across all of your devices.  You basically send it your ideas and it does the rest. The demo on stage shows how you can send voice actions and Spark creates tasks in the background for it to run when you're not using your devices.</p></div><div class="live-content"><time datetime="2026-05-19T17:43:39+00:00">May 19, 2026 – 1:43 PM</time><h2 id="new-google-ai-ultra-plans-revealed">New Google AI Ultra plans revealed</h2><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="j2xnR4thcUYxKSBHZmPg36" name="Google I_O '26 Keynote 1-46-22 screenshot" alt="New Google AI Ultra plan at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/j2xnR4thcUYxKSBHZmPg36.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>If you intend on using these new models, Google's introducing new Google AI Ultra plans starting at $100 per month.</p></div><div class="live-content"><time datetime="2026-05-19T17:46:21+00:00">May 19, 2026 – 1:46 PM</time><h2 id="google-search-is-now-backed-by-gemini-3-5">Google Search is now backed by Gemini 3.5</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EcPu2BZknH5y8zxnhLagMW" name="Google I_O '26 Keynote 1-50-27 screenshot" alt="Google Search is AI Search at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/EcPu2BZknH5y8zxnhLagMW.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Next up, Google Search! It's now being turbocharged with Gemini 3.5, with the ability to perform complex tasks through search, like creating an itinerary. </p></div><div class="live-content"><time datetime="2026-05-19T17:50:12+00:00">May 19, 2026 – 1:50 PM</time><h2 id="we-re-entering-the-era-of-search-agents">'We're entering the era of search agents'</h2><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="SFKiXSPH9iWSZfDdRuvmYe" name="Google I_O '26 Keynote 1-51-43 screenshot" alt="New intelligent search bar at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/SFKiXSPH9iWSZfDdRuvmYe.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>"We're entering the era of search agents." Google Search is evolving by tapping into multiple search agents, so you can get more done. One of the examples shows how Google Search works with different agents in the background, like learning about stock price changes that happen in real time, along with information that's relevant to your searches. </p></div><div class="live-content"><time datetime="2026-05-19T17:53:51+00:00">May 19, 2026 – 1:53 PM</time><h2 id="the-best-version-of-search-is-the-one-that-works-for-you">'The best version of search is the one that works for you'</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8UXn4qhoJJr7B5c5VCBPxP" name="Google I_O '26 Keynote 1-56-32 screenshot" alt="Agentic coding in search at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/8UXn4qhoJJr7B5c5VCBPxP.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Robby Stein from Google is on stage to demo agentic capabilities of Gemini. "We believe the best version of search is the one that works for you," explains Stein.</p><p>With this new AI overview, you can get interactive experience in search, like learning about black holes. Search will even generate animations and custom UIs on different search topics.</p></div><div class="live-content"><time datetime="2026-05-19T17:56:20+00:00">May 19, 2026 – 1:56 PM</time><h2 id="search-can-create-tasks-at-scale">Search can create tasks at scale</h2><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="8SwTiHDCAQvULdMRXHhg9m" name="Google I_O '26 Keynote 1-59-54 screenshot" alt="Generative AI in search demo at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/8SwTiHDCAQvULdMRXHhg9m.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Search has the ability to help create mini apps for you, perfect for handling tasks at scale. The example of this is finding ideas for family fun things to do during the weekend, and Search creates a weekend planner from scratch all for you.</p></div><div class="live-content"><time datetime="2026-05-19T18:02:37+00:00">May 19, 2026 – 2:02 PM</time><h2 id="universal-commerce-protocol-open-standard-for-shopping">Universal Commerce Protocol open standard for shopping</h2><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="Y7W2kM9avB8n9WxTg47hNZ" name="Google I_O '26 Keynote 2-4-18 screenshot" alt="Product listings on Google Search at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/Y7W2kM9avB8n9WxTg47hNZ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Vidhya Srinvasan from Google is on stage to talk about shopping with Google, which all starts with Shopping Graph. Universal Commerce Protocol is an open standard that's being rolled out to several Google products.</p></div><div class="live-content"><time datetime="2026-05-19T18:07:27+00:00">May 19, 2026 – 2:07 PM</time><h2 id="universal-cart-is-a-truly-intelligent-cart">'Universal Cart is a truly intelligent cart'</h2><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="amzczbK7sMHc5QhB8GdM4K" name="Google I_O '26 Keynote 2-10-11 screenshot" alt="Universal Cart availability at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/amzczbK7sMHc5QhB8GdM4K.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>"Universal Cart is a truly intelligent cart," explains Srinvasan. This new feature will look up price changes, history, and adjust you price carts with help from agents. What's really fascinating is how intelligent it is, like know that the motherboard you're buying isn't compatible with processor you've added, so it'll automatically know that and provide you with choices.</p></div><div class="live-content"><time datetime="2026-05-19T18:14:06+00:00">May 19, 2026 – 2:14 PM</time><h2 id="gemini-app-gets-updated-with-neural-expressive-experience">Gemini app gets updated with Neural Expressive experience</h2><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="T5Js8ZsVqw63uPoNCxFzaN" name="Google I_O '26 Keynote 2-17-51 screenshot" alt="Neural Expressive rollout timeline at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/T5Js8ZsVqw63uPoNCxFzaN.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Gemini app is getting big changes, including a new experience built from the ground up with Neural Expressive. design language. It's a visual change that will include interactive images with its responses, timelines with generated videos, and more. Neural Expressive is rolling out to Android, iOS, and the web.</p><p>Gemini Omni is also coming to the app, like the ability to create and edit videos.</p></div><div class="live-content"><time datetime="2026-05-19T18:15:31+00:00">May 19, 2026 – 2:15 PM</time><h2 id="gemini-omni-s-ability-to-generate-video-is-impressive">Gemini Omni's ability to generate video is impressive</h2><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="LnhafeLXZcWPxsVtZWPnQZ" name="Google I_O '26 Keynote 2-19-35 screenshot" alt="Gemini Omni rollout at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/LnhafeLXZcWPxsVtZWPnQZ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Gemini Omni got demoed at I/O, showing how you can create a video you've uploaded with additional prompts to transform it to something else, like being able to rotate the framing and adding other elements.</p></div><div class="live-content"><time datetime="2026-05-19T18:17:40+00:00">May 19, 2026 – 2:17 PM</time><h2 id="daily-brief-finds-important-information">Daily Brief finds important information</h2><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="HrHiYhKic7ogmzVKumwNre" name="Google I_O '26 Keynote 2-20-21 screenshot" alt="Daily Brief at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/HrHiYhKic7ogmzVKumwNre.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Daily Brief finds the most important things in you data, and presents them in digestible form.</p></div><div class="live-content"><time datetime="2026-05-19T18:20:37+00:00">May 19, 2026 – 2:20 PM</time><h2 id="gemini-app-is-coming-to-macos">Gemini app is coming to MacOS</h2><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="My9aqpwViZBrf4ydq3WKxJ" name="Google I_O '26 Keynote 2-23-30 screenshot" alt="Gemini app on MacOS at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/My9aqpwViZBrf4ydq3WKxJ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>If you're using MacOS, you'll be happy to know that the Gemini app is coming to it. Apple users will be able to access many of the new agents and features with Gemini on MacOS.</p></div><div class="live-content"><time datetime="2026-05-19T18:27:48+00:00">May 19, 2026 – 2:27 PM</time><h2 id="google-pics-and-stitch-makes-creation-a-breeze">Google Pics and Stitch makes creation a breeze</h2><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="zFKWJYQyJpHNdzhzZkqM5C" name="Google I_O '26 Keynote 2-30-30 screenshot" alt="Stitch at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/zFKWJYQyJpHNdzhzZkqM5C.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google Pics is an image creation and editing tool, from flyers to infographics. It's rolling out this summer.</p><p>Meanwhile, Stitch turns rough ideas to beautiful designs. For example, it can be used to create interfaces using prompts or your voice. You can create web sites in real time, using powerful tools to design a website.</p></div><div class="live-content"><time datetime="2026-05-19T18:30:52+00:00">May 19, 2026 – 2:30 PM</time><h2 id="gemini-omni-agent-tools-and-music-are-rolling-out-to-google-flow">Gemini Omni, Agent, Tools, and Music are rolling out to Google Flow</h2><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="ESxqzxZmfdWvvjYhKbtq8e" name="Google I_O '26 Keynote 2-34-24 screenshot" alt="Agent taking on multiple prompts at once with image editing at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/ESxqzxZmfdWvvjYhKbtq8e.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>If you're looking to create more videos, Google Flow is getting a big boost to generate new characters and elements by simply typing your request. On top of that, your agents can take multiple actions at one - like taking a single image and transforming it into several different clips. You'll be able to edit at scale.</p></div><div class="live-content"><time datetime="2026-05-19T18:34:14+00:00">May 19, 2026 – 2:34 PM</time><h2 id="google-flow-music-takes-your-boring-music-and-makes-it-professionally-mixed">Google Flow Music takes your boring music and makes it professionally mixed</h2><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="LvGn4YfD7EFW5cPYceCPrm" name="Google I_O '26 Keynote 2-35-46 screenshot" alt="Sharing creations in Google Flow at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/LvGn4YfD7EFW5cPYceCPrm.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Another exciting demo shows Google Flow Music takes and how a simple piano track can be transformed into a complete musical track that sounds professionally mixed.</p></div><div class="live-content"><time datetime="2026-05-19T18:36:28+00:00">May 19, 2026 – 2:36 PM</time><h2 id="our-first-audio-glasses-will-arrive-this-fall">'Our first audio glasses will arrive this fall'</h2><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="rn9KMHGYNVfJHX5xCw2tcR" name="Google I_O '26 Keynote 2-39-29 screenshot" alt="Audio Glasses release date reveal at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/rn9KMHGYNVfJHX5xCw2tcR.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>If you're eager to know about about Android XR, Google says that "our first audio glasses will arrive this fall." So farm Gentle Monster and Warby Parker are partners in creating these glasses in conjunction with Samsung. And yes, they'll pair with Android and iOS devices.</p></div><div class="live-content"><time datetime="2026-05-19T18:39:39+00:00">May 19, 2026 – 2:39 PM</time><h2 id="first-look-at-samsung-s-new-intelligent-eyewear">First look at Samsung's new 'intelligent eyewear'</h2><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="aLAjzG67pBaDTCedp7R3s3" name="Google I_O '26 Keynote 2-43-20 screenshot" alt="Gentle Monster and Warby Parker Intelligent Glasses at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/aLAjzG67pBaDTCedp7R3s3.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Samsung's smart glasses introduces intelligent eyewear, with a focus on design and style. Really, the premise reminds us awfully of the Amazon Echo Frames - since it's an audio-focus experience.</p></div><div class="live-content"><time datetime="2026-05-19T18:44:05+00:00">May 19, 2026 – 2:44 PM</time><h2 id="order-coffee-through-your-glasses-with-gemini">Order coffee through your glasses with Gemini</h2><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="jeA3RjQ7C6qp4Z8eVnZHr7" name="Google I_O '26 Keynote 2-44-7 screenshot" alt="Intelligent Eyewear demo at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/jeA3RjQ7C6qp4Z8eVnZHr7.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Maps integrate with Samsung's intelligent eyewear, including getting directions. Gemini can also perform automated tasks, just like on the Galaxy S26, like using Doordash for a coffee order. The way it functions is basically the same as Gemini on the Galaxy S26, so it's not something special we haven't experienced before. Finally, it understands contextual information. But the biggest reveal is that it has a camera!</p></div><div class="live-content"><time datetime="2026-05-19T18:52:24+00:00">May 19, 2026 – 2:52 PM</time><h2 id="computational-discovery-helps-to-make-deliver-accurate-predictions">Computational Discovery helps to make deliver accurate predictions</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="BofbyKov68NJ6bppoG6R6C" name="Google I_O '26 Keynote 2-52-0 screenshot" alt="Gemini for Science at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/BofbyKov68NJ6bppoG6R6C.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Gemini for Science offers tools to accelerate research and make predictions, like hurricanes.</p></div><div class="live-content"><time datetime="2026-05-19T19:11:06+00:00">May 19, 2026 – 3:11 PM</time><h2 id="will-shopping-habit-change-with-google-s-universal-cart">Will shopping habit change with Google's Universal Cart?</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7641669425636166926" data-video-id="7641669425636166926" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7641669530284083981">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>Universal Cart could change the way we all shop online, which uses AI to proactively check your cart. Just take a peek at the demo of it on stage during Google I/O 2026 to see how the AI knows what parts you're buying for a new PC build.</p></div><div class="live-content"><time datetime="2026-05-19T19:17:19+00:00">May 19, 2026 – 3:17 PM</time><h2 id="should-meta-be-afraid">Should Meta be afraid?</h2><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="B7ui8vN7aD9FFABUbzjQAh" name="Google I_O '26 Keynote 2-49-13 screenshot" alt="Intelligent Eyewear Fact Sheet at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/B7ui8vN7aD9FFABUbzjQAh.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's collaboration with Samsung brought two working demos of its "intelligent eyewear" devices that aim to bring Gemini in a whole new way with glasses designed from Warby Parker and Gentle Monster.</p><p>What's surprising about them, is the deep integration of Gemini to perform tasks all through voice commands. What do you think? Are they enough to make Meta and its partners afraid?</p></div><div class="live-content"><time datetime="2026-05-19T19:42:13+00:00">May 19, 2026 – 3:42 PM</time><h2 id="gemini-spark-is-the-assistant-i-ve-been-waiting-for">Gemini Spark is the assistant I've been waiting 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="weUnmka5Q7CQ5N7nFMkUD3" name="Google I_O '26 Keynote 1-46-6 screenshot" alt="Gemini Spark rollout reveal at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/weUnmka5Q7CQ5N7nFMkUD3.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p><a href="https://www.tomsguide.com/ai/google-gemini/google-unveils-gemini-spark-a-24-7-personal-ai-agent-that-could-be-a-game-changer-for-agentic-ai">Google Spark </a>is one of the latest AI agents introduced during the keynote. What's special about this one is that it lives in the cloud, where the agent will proactively work on tasks on its own. It behaves differently because it'll continue to work in the background.</p><p>Personally, it's the AI agent I've been waiting for because it means that I can send it tasks and it'll track, manage, and proactively work on it. If you rewatch the live event, you'll see how it can be used to help with wedding plans, including the ability to track RSVPs, send reminders to people, and more.</p></div><div class="live-content"><time datetime="2026-05-19T19:59:47+00:00">May 19, 2026 – 3:59 PM</time><h2 id="youtube-s-about-to-get-even-more-helpful">YouTube's about to get even more helpful</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7641654401370787086" data-video-id="7641654401370787086" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7641654548948060942">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>Just like everyone else, I spent a great deal of time on YouTube watching all sorts of videos. But a new feature coming soon will make it even more helpful.</p><p><a href="https://www.tomsguide.com/how-to/youtube-now-lets-you-ask-its-ai-questions-about-videos-heres-how-it-works">Ask YouTube</a> is an AI feature that better tailors results based on your search. For example, if you're wondering how to properly clean the sensor in a specific camera, you can send this inquiry to YouTube and it'll provide you with meaningful video results. Not only will it find videos that directly answer your question, but it'll even start the video at the exact place where it answers it.</p></div><div class="live-content"><time datetime="2026-05-19T20:30:57+00:00">May 19, 2026 – 4:30 PM</time><h2 id="checking-out-ai-mode">Checking out AI mode </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:8064px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="oKL96Bq8nwsBrBnMaxFMLX" name="IMG_4958" alt="Google I/O 2026 - AI mode, planner mode in search" src="https://cdn.mos.cms.futurecdn.net/oKL96Bq8nwsBrBnMaxFMLX.jpg" mos="" align="middle" fullscreen="" width="8064" height="4536" 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 are on site at Google I/O and checking out the various AI tools and devices that were announced today.</p><p>In this image, we're being shown the planner features in Google Search that can create weekend planners for you.</p><p>It's part of the new ability for Search to create mini apps for you and while connecting to other Google apps like your calendar.</p></div><div class="live-content"><time datetime="2026-05-19T21:09:48+00:00">May 19, 2026 – 5:09 PM</time><h2 id="be-sure-to-follow-our-tiktok">Be sure to follow our TikTok</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7641657760362417422" data-video-id="7641657760362417422" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7641663067629832974">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>Tom's Guide is on TikTok where we're showing off what we see at Google I/O including hands-on demonstrations with smart glasses, new Search tools and more. </p><p>Be sure to give us a follow if you're on that platform.</p></div><div class="live-content"><time datetime="2026-05-19T21:30:58+00:00">May 19, 2026 – 5:30 PM</time><h2 id="eyes-on-with-google-s-prototype-glasses">Eyes on with Google's prototype glasses</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/A5rTQUpSi97WRuFSuGvk4k.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/u5FjUQEQaeEiQbXJRZGZAk.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8PEsM2DhDQdjPjkTV7eDBm.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sY5Um9fimEqD5cbzMfXWWk.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/3nfoHMCdwn6vGkqjSCErqk.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jxT3ZDp9eSQKiqNupqPzUk.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>We've had a chance to go eyes on with a prototype of Google's smart glasses. </p><p>The display was turned off so we could experience it as a version of the future audio only model. It does seem reminiscent of the Ray-Ban Meta Wayfarer shades.</p><p>We didn't order any cold brews though.</p></div><div class="live-content"><time datetime="2026-05-19T22:00:49+00:00">May 19, 2026 – 6:00 PM</time><h2 id="project-aura-makes-an-appearance">Project Aura makes an appearance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GP59e3HbND8F7mPT4KVzj3" name="IMG_8887" alt="Google I/O 2026 - Xreal Project Aura glasses" src="https://cdn.mos.cms.futurecdn.net/GP59e3HbND8F7mPT4KVzj3.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Google and its partnerships have at least three smart glasses launching this year. </p><p>One of them is <a href="https://www.tomsguide.com/computing/smart-glasses/xreals-project-aura-reveals-the-exciting-true-intentions-for-android-xr-but-will-anyone-actually-wear-them">Xreal's Project Aura</a>. You can see the display glasses above with a puck that is supposed to feature a Qualcomm Snapdragon chip that helps enable many of the features we can expect. </p></div><div class="live-content"><time datetime="2026-05-19T22:32:28+00:00">May 19, 2026 – 6:32 PM</time><h2 id="live-demo-of-google-s-audio-glasses">Live demo of Google's Audio Glasses</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7641681775265205517" data-video-id="7641681775265205517" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7641681872707275534">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>During the Google I/O keynote speech, there was a live demo of Google's audio glasses showcasing the Gemini capabilities without the need to pull out your phone.</p></div><div class="live-content"><time datetime="2026-05-19T23:02:47+00:00">May 19, 2026 – 7:02 PM</time><h2 id="google-ai-ultra-changes-the-game">Google AI Ultra changes the 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="o74mitjGMdgLu6WXJK7N6n" name="🎬 Watch The Android Show _ I_O Edition 2026 9-11 screenshot" alt="Gemini Intelligence" src="https://cdn.mos.cms.futurecdn.net/o74mitjGMdgLu6WXJK7N6n.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>During Google I/O 2026, the company unveiled a new AI Ultra tier that costs $100 per month. It's meant for devs, creators and power users. </p><p>This includes the newly unveiled Gemini Spark model which Google calls a "24/7 AI agent."</p><p>My colleague Amanda Caswell gets into way <a href="https://www.tomsguide.com/ai/googles-new-usd100-ai-ultra-plan-just-changed-the-ai-race-and-gemini-spark-is-the-biggest-reason-why">more depth here</a> suffice to say, Google is committed to AI agents and assistants that actively manage information for users.</p></div><div class="live-content"><time datetime="2026-05-19T23:35:32+00:00">May 19, 2026 – 7:35 PM</time><h2 id="intelligent-eyewear-and-gemini-edit-a-photo">Intelligent eyewear and Gemini edit a photo</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/H5EHwcSVQG9mNPxCUwW7Fe.jpg" alt="Google I/O 2026 - Using Intelligent Eyewear to make a superhero" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XfvBw3t2bdbUbZUZRkQjHe.jpg" alt="Google I/O 2026 - Using Intelligent Eyewear to make a superhero" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>While testing out Intelligent Eyewear we gave it a prompt to turn my colleague Paul Antill. </p><p>The prompt was, "“Take a picture and make him look like a superhero."</p><p>It did, but it also changed the name on his media tag to read "Paul Arnold." </p><p>So meet Super Paul Arnold or GL, the Googler? Also, it made his face weird more cartoonish.</p></div><div class="live-content"><time datetime="2026-05-20T10:45:24+00:00">May 20, 2026 – 6:45 AM</time><h2 id="hands-on-with-google-s-intelligent-eyewear">Hands-on with Google's 'Intelligent Eyewear'</h2><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="ipcxBr2BHn6kFeNHc4uNa6" name="Android XR" alt="Android XR" src="https://cdn.mos.cms.futurecdn.net/ipcxBr2BHn6kFeNHc4uNa6.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The dust has settled on Google's I/O 2026 keynote, but the developer conference will continue to run for the next few days as we start to get our hands on the new tools revealed on stage. One of the most interesting is Google’s “Intelligent Eyewear,” and how it stacks up against the Ray-Ban Meta smart glasses.</p><p>Our Computing Editor, Jason England, is out at I/O this week and has got some hands-on time with the prototype and you can <a href="https://www.tomsguide.com/computing/smart-glasses/i-tested-googles-intelligent-eyewear-and-found-the-smart-glasses-that-will-defeat-ray-ban-meta?hasComeFromProof=true">read his initial verdict right here</a>. Bottom line? Mark Zuckerberg has a real fight on his hands. </p></div><div class="live-content"><time datetime="2026-05-20T11:32:32+00:00">May 20, 2026 – 7:32 AM</time><h2 id="google-s-new-search-is-great-unless-you-re-a-journalist">Google's new Search is great — unless you're a journalist</h2><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="FzCR7sQo3EYNPbmmKLTFJT" name="Google search" alt="Google search" src="https://cdn.mos.cms.futurecdn.net/FzCR7sQo3EYNPbmmKLTFJT.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>We got to take a look at Google's redefined Search box at I/O and it's fair to say the added power of AI tools is an exciting prospect when it comes to making sense of a noisy and confusing internet. </p><p>But what's clearly a generational leap in making the wider internet more personable and accessible also has big implications. It could be a very worrying sign for publications and other businesses that exist on referral traffic from Google to survive. One thing's for sure: the days of seeing 10 blue links beneath your Google search are well and truly dead.    </p><ul><li><strong>Read more:</strong> <a href="https://www.tomsguide.com/computing/internet/i-hate-that-i-love-googles-new-ai-powered-search-bar-it-makes-the-internet-easier-to-digest-but-my-career-is-cooked-now">I hate that I love Google’s new AI-powered search bar — it makes the internet easier to digest, but my career is cooked now</a></li></ul></div><div class="live-content"><time datetime="2026-05-20T15:51:59+00:00">May 20, 2026 – 11:51 AM</time><h2 id="could-we-see-more-improvements-to-the-android-desktop-mode">Could we see more improvements to the Android desktop mode?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4106px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="4vwYuFZx9Ht9E3pmZ6BArV" name="Android 16 Desktop Mode On Pixel 10" alt="Pixel 10 running Android 16 desktop mode." src="https://cdn.mos.cms.futurecdn.net/4vwYuFZx9Ht9E3pmZ6BArV.jpg" mos="" align="middle" fullscreen="" width="4106" height="2310" 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>Last year, Google quietly revealed its new <a href="https://www.tomsguide.com/phones/android-phones/android-16-desktop-mode-googles-best-kept-secret-got-a-quiet-reveal-at-i-o">Android desktop mode</a>, which was developed developed with the help of Samsung. We could possibly hear more about what other changes and improvements is in store for the desktop mode during day 2 of Google I/O 2026.</p><p>Available to the most new Pixel phones, <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-this-hidden-desktop-mode-on-my-pixel-9-pro-xl-google-needs-to-bring-this-to-all-android-phones">we've tried out this desktop mode</a> and said it's a good start, but certainly trails what <a href="https://www.tomsguide.com/phones/samsung-phones/i-ditched-my-laptop-for-2-weeks-for-the-galaxy-z-fold-6-heres-what-happened">Samsung DeX</a> offers. Since then, we've seen Motorola's version get updated in a big way with <a href="https://www.tomsguide.com/phones/motorola-phones/motorolas-new-smart-connect-features-are-a-super-practical-use-of-ai">Smart Connect</a> for the <a href="https://www.tomsguide.com/phones/motorola-phones/this-underrated-motorola-razr-fold-feature-makes-me-more-productive-google-apple-and-samsung-should-take-notice">Razr Fold</a>.</p></div><div class="live-content"><time datetime="2026-05-20T16:37:45+00:00">May 20, 2026 – 12:37 PM</time><h2 id="meta-has-a-lot-of-work-ahead-of-itself">Meta has a lot of work ahead of itself</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4439px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="H3x5zw3buY9ycGGb8bFodL" name="IMG_4488" alt="Oakley Meta HSTN smart glasses" src="https://cdn.mos.cms.futurecdn.net/H3x5zw3buY9ycGGb8bFodL.jpg" mos="" align="middle" fullscreen="" width="4439" height="2497" 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 its debut during the keynote yesterday, Google's positioning itself in a very good way with its upcoming <a href="https://www.tomsguide.com/computing/smart-glasses/forget-meta-ray-bans-samsungs-intelligent-eyewear-glasses-just-launched-at-google-i-o-and-theyre-coming-this-fall">Intelligent Eyewear devices</a>, developed in collaboration with Samsung.</p><p>While Meta has been in the business of making smart glasses for a long while now, with notable models like the <a href="https://www.tomsguide.com/computing/smart-glasses/ray-ban-meta-gen-2-review">Ray-Ban Meta</a> and <a href="https://www.tomsguide.com/computing/smart-glasses/meta-ray-ban-display-review">Meta Ray-Ban Display</a>, there are features they don't have that Google's upcoming glasses offer. Clearly there's a hump to overcome, but with Meta Connect 26 happening in September, it's <a href="https://www.tomsguide.com/computing/smart-glasses/meta-has-five-months-to-fix-these-3-things-before-its-ray-bans-get-smoked-by-googles-intelligent-eyewear">going to need to catch up in a big way</a>.</p></div><div class="live-content"><time datetime="2026-05-20T17:37:56+00:00">May 20, 2026 – 1:37 PM</time><h2 id="googlebook-was-a-no-show-at-google-i-o-2026">Googlebook was a no-show at Google I/O 2026</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4096px;"><p class="vanilla-image-block" style="padding-top:74.27%;"><img id="uCx95t8GvqBqx2ARtBSDuH" name="Googlebook-4" alt="Googlebook" src="https://cdn.mos.cms.futurecdn.net/uCx95t8GvqBqx2ARtBSDuH.jpg" mos="" align="middle" fullscreen="" width="4096" height="3042" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google absolutely stirred some attention when it revealed its <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebook </a>during last week's Android Show, but it was a no-show at the Google I/O 2026 keynote. While these premium laptops are fundamentally tied to Gemini Intelligence, we were hopeful to learn more about them, especially what its hardware partners intend to do with their versions.</p></div><div class="live-content"><time datetime="2026-05-20T18:44:43+00:00">May 20, 2026 – 2:44 PM</time><h2 id="xreal-s-android-xr-glasses-could-make-you-rethink-about-google-s-intelligent-eyewear">Xreal’s Android XR glasses could make you rethink about Google's intelligent eyewear</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3019px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="j2c8YKieMuBjrk6wEPQhGJ" name="Xreal Project Aura" alt="Xreal Project Aura" src="https://cdn.mos.cms.futurecdn.net/j2c8YKieMuBjrk6wEPQhGJ.jpg" mos="" align="middle" fullscreen="" width="3019" height="1698" 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's a lot of different types of smart glasses vying for consumer recognition and Android XR is one of them, which shouldn't be mistaken for Google's "intelligent eyewear" glasses it showed off at the Google I/O 2026 keynote.</p><p>Our very own <a href="https://www.tomsguide.com/author/jason-england">Jason England</a> got a first <a href="https://www.tomsguide.com/computing/smart-glasses/xreal-android-xr-project-aura-smart-glasses-hands-on-review">hands-on look at Xreal's Project Aura</a>, which are AR glasses in the same vein as Samsung's Galaxy XR and Apple's Vision Pro headset. But unlike them, Xreal's version looks more like an ordinary pair of glasses that looks less conspicuous.</p><p>After trying them out at Google I/O 2026, England's quite impressed by them, so much so that he says that "these are a glimpse into the exciting future of AR glasses."</p></div><div class="live-content"><time datetime="2026-05-20T19:52:55+00:00">May 20, 2026 – 3:52 PM</time><h2 id="gemini-omni-takes-video-generation-to-the-next-level">Gemini Omni takes video generation to the next level</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/eIZRs2jkGfY" allowfullscreen></iframe></div></div><p>If you love video as much as we do, then you might know how involved it can be putting together a compelling video that engages people. With <a href="https://www.tomsguide.com/ai/gemini-omni-flash-can-create-and-edit-videos-with-your-voice-and-it-feels-like-the-future-of-multimodal-ai">Gemini Omni</a>, it's taking video creation to a whole new level.</p><p>This generative service can do amazing things, like take a photo you give to it and generate several videos based on different prompts. You can also reimagine what they look like if you're looking for something entirely unique. Either way, check out what it's capable above in the video above.</p></div><div class="live-content"><time datetime="2026-05-20T20:53:37+00:00">May 20, 2026 – 4:53 PM</time><h2 id="apple-can-t-afford-to-lose-more-ground-to-google">Apple can't afford to lose more ground to Google</h2><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="6fYmPYNJsFjKuJQkWsenUE" name="tim cook.GettyImages-2218819259" alt="Tim Cook at WWDC 2025" src="https://cdn.mos.cms.futurecdn.net/6fYmPYNJsFjKuJQkWsenUE.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p>Google continues to push the boundaries for AI, evident in all of the new Gemini models and features introduced at the I/O 2026 keynote and Gemini Intelligence features from last week's Android Show.</p><p>Considering how Google Pixel phones have some of the best AI features around, it really puts the pressure on Apple, which is slated to host its <a href="https://www.tomsguide.com/phones/iphones/wwdc-2026">WWDC 2026</a> developers conference next month. We know that Apple's going to tap Gemini to power its new Siri, but what to degree is still unknown. Nevertheless, Apple can't afford to lose more ground in the AI race.</p></div><div class="live-content"><time datetime="2026-05-20T21:37:40+00:00">May 20, 2026 – 5:37 PM</time><h2 id="android-auto-is-about-to-be-way-more-dynamic">Android Auto is about to be way more dynamic</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="qgztpL33vsS7TcKbAuweqi" name="Android Auto at Google I/O 2026" alt="Android Auto at Google I/O 2026." src="https://cdn.mos.cms.futurecdn.net/qgztpL33vsS7TcKbAuweqi.jpg" mos="" align="middle" fullscreen="" width="6000" height="3376" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Jason England)</span></figcaption></figure><p>CarPlay Ultra was meant to shake things up when it was first introduced last year, with an emphasis on deeper integration with cars, but its lack of support from car makers has fizzled it somewhat.</p><p><a href="https://www.tomsguide.com/phones/android-auto-is-about-to-change-the-way-you-drive-3d-google-maps-redesigned-interface-video-support-gemini-and-more">Android Auto</a>, on the other hand, is about to get its biggest makeover in years with a new dynamic interface that adapts to different sized displays <strong>— </strong>and not to mention, multiple screens within a car</p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/news/live/google-io-2026-live-news-updates</link>
                                                                            <description>
                            <![CDATA[ Google I/O 2026 is here, and we're keeping up with all the latest details around Android 17, Android XR, Googlebooks, Gemini Intelligence, and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">eTXHRFKsNKog5WfUpsgz26</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/h37n4vQZ82WippSEERgdP4-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 19 May 2026 14:56:08 +0000</pubDate>                                                                                                                                <updated>Wed, 20 May 2026 21:37:43 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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 Managing News Editor for Tom&#039;s Guide, keeping his finger on the pulse of all things technology. He loves taking the complicated happenings in the tech world and explaining why they matter. Whether Apple is announcing the next big thing in the mobile space or a small startup advancing generative AI, Dave will apply his experience to help you figure out what&#039;s happening and why it&#039;s relevant to your life.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Before Tom&#039;s Guide, Dave worked for publications like PCMag, Pocket-lint, MUO, How-To Geek, Digital Trends, and others. He started writing about technology professionally for MUO in 2011 and hasn&#039;t looked back since. In addition to news, you can find reviews, how-to pieces, shopping guides, and many other types of content with Dave&#039;s name attached.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/h37n4vQZ82WippSEERgdP4-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google IO 2026]]></media:description>                                                            <media:text><![CDATA[Google IO 2026]]></media:text>
                                <media:title type="plain"><![CDATA[Google IO 2026]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/h37n4vQZ82WippSEERgdP4-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="live-content"><p>The Google I/O 2026 keynote has come and gone, and there's no kidding about Gemini being top priority. While a vast majority of it was dedicated to new <a href="https://www.tomsguide.com/ai/google-just-launched-gemini-3-5-flash-and-gemini-spark-changes-what-ai-assistants-can-do">Gemini models</a>, Google saved the tail end of the keynote to show off new <a href="https://www.tomsguide.com/computing/smart-glasses/forget-meta-ray-bans-samsungs-intelligent-eyewear-glasses-just-launched-at-google-i-o-and-theyre-coming-this-fall">"intelligent eyewear" devices</a> that are coming out this fall.</p><p>In the past, the event has been tailored to show off new tools and features for its other platforms, like <a href="https://www.tomsguide.com/phones/android-phones/android-17-changes-worth-paying-attention-to">Android 17</a> and Android Auto, but it's interesting how AI continues to be the big focus, especially with Gemini.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gK4r9d" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><p>Despite being shown off at last week's Android Show, there wasn't any time devoted to other <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebook</a> laptops that Google previously teased from other hardware makers. </p><p>Here's all the biggest announcements from Google I/O 2026 .</p><h2 class="article-body__section" id="section-biggest-google-i-o-2026-announcements"><span>Biggest Google I/O 2026 Announcements</span></h2><ul><li><a href="https://www.tomsguide.com/ai/google-gemini/google-search-box-just-got-the-biggest-makeover-in-nearly-30-years" target="_blank">Google Search just got the biggest upgrade in nearly 30 years</a></li><li><a href="https://www.tomsguide.com/ai/google-gemini/google-unveils-gemini-spark-a-24-7-personal-ai-agent-that-could-be-a-game-changer-for-agentic-ai" target="_blank">Google unveils Gemini Spark — a '24/7 personal AI agent' </a></li><li><a href="https://www.tomsguide.com/computing/smart-glasses/forget-meta-ray-bans-samsungs-intelligent-eyewear-glasses-just-launched-at-google-i-o-and-theyre-coming-this-fall" target="_blank">Samsung's 'Intelligent Eyewear' glasses just launched at Google I/O, and they're coming this fall</a></li><li><a href="https://www.tomsguide.com/ai/google-just-launched-gemini-3-5-flash-and-gemini-spark-changes-what-ai-assistants-can-do" target="_blank">Google just launched Gemini 3.5 Flash — here’s all the upgrades</a></li><li><a href="https://www.tomsguide.com/tech-events/googles-new-universal-cart-uses-ai-to-track-deals-and-shop-across-apps" target="_blank">Google’s new 'Universal Cart' uses AI to track deals and shop across apps</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/ask-youtube-entirely-reimagines-how-you-find-videos-with-a-conversational-search-experience-heres-how-it-works" target="_blank">Ask YouTube 'entirely reimagines' how you find videos — how it works</a></li><li><a href="https://www.tomsguide.com/ai/googles-new-usd100-ai-ultra-plan-just-changed-the-ai-race-and-gemini-spark-is-the-biggest-reason-why" target="_blank">Google’s new $100 AI Ultra plan just changed the AI race</a></li></ul><h2 class="article-body__section" id="section-how-to-watch-google-i-o-2026"><span>How to watch Google I/O 2026</span></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/wYSncx9zLIU" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-google-i-o-2026-live-updates"><span>Google I/O 2026 — Live updates</span></h3></div><div class="live-content"><time datetime="2026-05-19T14:50:32+00:00">May 19, 2026 – 10:50 AM</time><h2 id="google-i-o-starts-soon">Google I/O starts soon!</h2><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="2ebQek8QDoVdsNaNuYPBxn" name="Google I/O 2026 live" alt="Google I/O live blog." src="https://cdn.mos.cms.futurecdn.net/2ebQek8QDoVdsNaNuYPBxn.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 / Google)</span></figcaption></figure><p>We're just a couple of hours away from the official news-dropping madness getting underway. If you're a fan of Android, Gemini or even if you just casually use Google products like Search, there's sure to be something to get you excited at the event once it kicks off. </p><p>Be sure to keep yourself locked to this live blog, as we'll bring you every important piece of information as it happens. </p></div><div class="live-content"><time datetime="2026-05-19T14:57:07+00:00">May 19, 2026 – 10:57 AM</time><h2 id="are-you-excited-for-i-o">Are you excited for I/O?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O9RaMX"></div>                            </div>                            <script src="https://kwizly.com/embed/O9RaMX.js" async></script><p>Google I/O is about to start and we're excited to see what the company has in store for us. But what are you most excited about? </p><p>Hit the poll above and let your voice be heard! </p></div><div class="live-content"><time datetime="2026-05-19T14:59:49+00:00">May 19, 2026 – 10:59 AM</time><h2 id="tom-s-guide-eic-weighs-in">Tom's Guide EIC weighs in</h2><p>"I'm personally excited to see the new Google and Samsung glasses and how they'll stand out versus Meta Ray-Ban. Hopefully, we'll learn more about unique features and see the designs from Warby Parker and Gentle Monster. Just keep in mind that these glasses won't have a display..." said Tom's Guide Global Editor in Chief Mark Spoonauer. </p></div><div class="live-content"><time datetime="2026-05-19T15:07:50+00:00">May 19, 2026 – 11:07 AM</time><h2 id="gemini-remy-could-make-its-debut">Gemini Remy could make its debut</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wDUATUTpPSFY8y4n9UB4De" name="gemini.shutterstock_2570446691" alt="Gemini logo on smartphone with the Google logo behind" src="https://cdn.mos.cms.futurecdn.net/wDUATUTpPSFY8y4n9UB4De.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Google has kept quiet about what I/O will have to offer, but it has teased a future of agentic AI. This means we may see it unveil some details about "Remy," the codename attached to Google's own personal AI agent.</p><p>According to <a href="https://www.businessinsider.com/google-ai-agent-openclaw-remy-gemini-assistant-2026-5" target="_blank">reports</a>, Remy is "your 24/7 personal agent for work, school and daily life, powered by Gemini." It will apparently be able to interact with other Google services and be more advanced than the agentic features Google has already started rolling out to the Gemini app. That means handling tasks proactively, learning your own preferences, and keeping track of things that matter.</p></div><div class="live-content"><time datetime="2026-05-19T15:11:26+00:00">May 19, 2026 – 11:11 AM</time><h2 id="some-changes-have-already-come-to-gemini-app">Some changes have already come to Gemini app</h2><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="d6iRrNAQeYiESHsFCyjoUK" name="shutterstock_2604883871-2" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/d6iRrNAQeYiESHsFCyjoUK.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: Shutterstock)</span></figcaption></figure><p>Gemini is likely to get the lion's share of reveals at I/O 2026, but eagle-eyed users have already spotted some <a href="https://9to5google.com/2026/05/17/gemini-app-thinking-level/" target="_blank"><u>changes</u></a> rolling out to the Gemini app. There seems to be a new "Thinking level" menu rolling out to the app's model picker, with "standard" and "extended" options added to the Fast and Pro models.</p><p>The Gemini app also seems to be prepping more integrations with third-party apps, with support documents suggesting support for Canva, Instacart, and OpenTable is on the way. Which means Gemini should be able to control these apps on your behalf, based on prompts you give it.</p><p>No doubt we'll hear more during the I/O conference.</p></div><div class="live-content"><time datetime="2026-05-19T15:27:49+00:00">May 19, 2026 – 11:27 AM</time><h2 id="gemini-3-5-coming-to-i-o">Gemini 3.5 coming to I/O?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:970px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="khFPxsQnHBMwjXkGCXtWB8" name="Gemini" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/khFPxsQnHBMwjXkGCXtWB8.webp" mos="" align="middle" fullscreen="" width="970" height="546" 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>A social media post by a Google DeepMind employee seems to confirm that Gemini 3.5 exists. This further bumps expectations that Google will announce the new model at I/O 2026, but we'll have to wait and see. </p><p><a href="https://x.com/scaling01/status/2056709799128035389" target="_blank">Pricing has allegedly been posted for the new AI model on X</a>, further making us think it'll launch today.</p></div><div class="live-content"><time datetime="2026-05-19T15:29:09+00:00">May 19, 2026 – 11:29 AM</time><h2 id="what-about-the-new-google-home-speaker">What about the new Google Home speaker?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2539px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="anNgf2v7aByT5acswDxKDN" name="Google Home Speaker leak" alt="Google Home speaker leaked during made by Google event" src="https://cdn.mos.cms.futurecdn.net/anNgf2v7aByT5acswDxKDN.jpg" mos="" align="middle" fullscreen="" width="2539" height="1428" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>While I/O may not be a hardware-focused event, there is still one lingering piece of hardware that hasn't been released — and now would be the perfect time to reveal an official date.</p><p>I'm talking, of course, about the <a href="https://www.tomsguide.com/home/smart-home/googles-next-gemini-powered-home-speaker-actually-appeared-during-pixel-10-launch-what-we-know">Google Home Speaker that was first teased last year</a>. Google said it would be arriving in Spring 2026. Since Spring is currently ongoing, it's about time we got some concrete information. The last thing we need is for this speaker to become the next Galaxy Home.</p></div><div class="live-content"><time datetime="2026-05-19T15:33:23+00:00">May 19, 2026 – 11:33 AM</time><h2 id="timing-reminder">Timing reminder!</h2><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="9Bssztbgz37fNNNa4UEGvd" name="Google IO.GettyImages-2215577882" alt="Google CEO" src="https://cdn.mos.cms.futurecdn.net/9Bssztbgz37fNNNa4UEGvd.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p>In case you forgot, Google's I/O 2026 keynote kicks off at 10 a.m. PT / 1 p.m. ET / 6 p.m. BST on May 19 (that's today), and you can tune into the event through the YouTube stream embedded above.</p><p>Of course, the best thing you can do is keep this live blog open, as not only will we tell you everything as it happens, but we'll explain why you should care about each bit of news.</p></div><div class="live-content"><time datetime="2026-05-19T15:52:30+00:00">May 19, 2026 – 11:52 AM</time><h2 id="googlebook-s-os-needs-a-name">Googlebook's OS needs a 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:4096px;"><p class="vanilla-image-block" style="padding-top:74.27%;"><img id="uCx95t8GvqBqx2ARtBSDuH" name="Googlebook-4" alt="Googlebook" src="https://cdn.mos.cms.futurecdn.net/uCx95t8GvqBqx2ARtBSDuH.jpg" mos="" align="middle" fullscreen="" width="4096" height="3042" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google may have revealed a bunch of details about Googlebooks, including the fact that they will be running on an Android-based operating system, but there's still a bunch we don't know. Like a name, because so far we've just been calling it Googlebook OS.</p><p>Rumors suggested that the <a href="https://www.tomsguide.com/computing/chromebooks/aluminium-os-tipped-to-be-googles-new-android-based-pc-operating-system">name AluminumOS could be on the cards</a>, but that might just have been a codename. Now that Googlebooks are confirmed, it's about time Google cleared the rest of those little details up.</p></div><div class="live-content"><time datetime="2026-05-19T16:02:50+00:00">May 19, 2026 – 12:02 PM</time><h2 id="smart-glasses-may-be-the-exception">Smart glasses may be the exception</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1154px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="BTrEwaC2NrPW5vL67a8Y2n" name="Exclusive-Samsung-Galaxy-Glasses-AH-1154x649" alt="Leaked render of Samsung Galaxy Glasses" src="https://cdn.mos.cms.futurecdn.net/BTrEwaC2NrPW5vL67a8Y2n.jpg" mos="" align="middle" fullscreen="" width="1154" height="649" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks / Android Headlines)</span></figcaption></figure><p>While we don't expect to see any mobile hardware at I/O, Google has confirmed we will be seeing more on the smart glasses front. We don't know a lot more than the fact smart glasses will be at I/O in some capacity, but there's a chance we may get our first details about Android XR-powered glasses you can actually buy.</p><p>Rumor has it that <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-just-tipped-for-july-22-launch-at-unpacked-and-it-could-be-joined-by-galaxy-glasses">Samsung's Galaxy Glasses will launch at Galaxy Unpacked in July</a>, and considering Google's close partnership with Samsung, there's a good chance we'll get some news about the AI specs. Though I can't imagine Samsung will allow a full reveal at someone else's event, when it's own is only a couple of months away.</p></div><div class="live-content"><time datetime="2026-05-19T16:17:29+00:00">May 19, 2026 – 12:17 PM</time><h2 id="live-stream-has-started">Live stream has started</h2><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="PoFEetXWxUkh8hWpe4YrCa" name="Google I_O '26 Keynote 17-16 screenshot" alt="The pre-show before the Google I/O 2026 keynote" src="https://cdn.mos.cms.futurecdn.net/PoFEetXWxUkh8hWpe4YrCa.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We're less than an hour out from the start of the Google I/O 2026 keynote. However, up on YouTube, the livestream has already started. We're currently being serenaded by Jellectronica AI music created by Google's Lyria 3. Meanwhile, a video feed shows jellyfish from the Monterey Bay Aquarium who were tracked using Google's AI object detection tech. </p></div><div class="live-content"><time datetime="2026-05-19T16:29:16+00:00">May 19, 2026 – 12:29 PM</time><h2 id="we-re-on-the-ground-live">We're on the ground live</h2><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="q6KgdbkbrAjHznsNLnjBCW" name="IMG_8787" alt="A shot from across the street showing the exterior of Google's I/O 2026 event" src="https://cdn.mos.cms.futurecdn.net/q6KgdbkbrAjHznsNLnjBCW.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: Tom's Guide)</span></figcaption></figure><p>Our own Jason England and Paul Antill have just arrived at the Shoreline Amphitheatre in Mountain View, California. We'll have more live coverage of the event once they make their way inside to get ready for the Google I/O keynote which is set to start in 30 minutes. So stay tuned!</p></div><div class="live-content"><time datetime="2026-05-19T16:38:35+00:00">May 19, 2026 – 12:38 PM</time><h2 id="and-we-re-in">And we're in</h2><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="iBoXCx88YKuStrf3kWS9D4" name="IMG_8796" alt="Jason England and Paul Antill in front of the I/O statue at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/iBoXCx88YKuStrf3kWS9D4.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: Tom's Guide)</span></figcaption></figure><p>Jason and Paul have now made it inside Google I/O and are getting ready to cover the keynote live from Mountain View. I just spoke with Paul on the phone and he and Jason are currently making their way to their seats. From what I could hear, things sounded pretty busy at the Shoreline Amphitheatre with less than 20 minutes to go before the keynote kicks off.</p></div><div class="live-content"><time datetime="2026-05-19T16:43:03+00:00">May 19, 2026 – 12:43 PM</time><h2 id="game-together-while-you-wait">Game together while you wait</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Jy6DM793czxqdrPze7TQfM.png" alt="A series of screenshot from the Google I/O 2026 livestream showing the hosts playing the game Infinite Scaler" /><figcaption><small role="credit">Google</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bY7FfdyNmzaEnZVZ87ueuM.png" alt="A series of screenshot from the Google I/O 2026 livestream showing the hosts playing the game Infinite Scaler" /><figcaption><small role="credit">Google</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/M8397naDfw7Duz4rmn82tM.png" alt="A series of screenshot from the Google I/O 2026 livestream showing the hosts playing the game Infinite Scaler" /><figcaption><small role="credit">Google</small></figcaption></figure></figure><p>The hosts up on stage at Google I/O are currently playing an interactive, browser-based side scrolling game called Infinite Scaler before the keynote starts. In the game, you make your way up an ever growing tower by moving left and right and jumping on pads as you dodge lasers beams, collect tokens and more. It seems fairly simple but it's neat how each room is created by Nano Banana. You can scan the QR code pictured above if you want to give it a try for yourself.</p></div><div class="live-content"><time datetime="2026-05-19T16:49:09+00:00">May 19, 2026 – 12:49 PM</time><h2 id="google-i-o-2026-keynote-countdown-has-begun-what-do-you-expect">Google I/O 2026 keynote countdown has begun! What do you expect?</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/CtRhU7uTfjNQdWGAhUgMgQ.jpg" alt="Google I/O 2026." /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sy494zMW2jbSKgXfMxjpRQ.jpg" alt="Google I/O 2026." /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/85YZTzEtTkhzAqYkvUbPBR.jpg" alt="Google I/O 2026." /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Howdy folks! <a href="https://www.tomsguide.com/author/john-velasco">John Velasco</a> here for Tom’s Guide and I’ll be taking you all through everything that’s going on with the Google I/O 2026 keynote. Last week’s Android Show certainly delivered a lot of buzz with announcements around Android Auto, Gemini Intelligence, Googlebooks, and more.</p><p>My colleagues <a href="https://www.tomsguide.com/author/jason-england">Jason England</a> and <a href="https://www.tomsguide.com/author/paul-antill">Paul Antill</a> are on the ground to get first hands-on experiences with whatever else new that Google reveals at its keynote? I’ve been covering Google I/O since the very first one — and while it’s always been an Android first affair — we’ve seen how it’s expanded to other exciting areas.</p></div><div class="live-content"><time datetime="2026-05-19T17:02:37+00:00">May 19, 2026 – 1:02 PM</time><h2 id="take-a-second-at-how-far-we-ve-come">'Take a second at how far we've come'</h2><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="LLB4fMFTDszCLVhLCrgnjJ" name="Google I_O '26 Keynote 1-5-36 screenshot" alt="People making things with Gemini" src="https://cdn.mos.cms.futurecdn.net/LLB4fMFTDszCLVhLCrgnjJ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google I/O 2026 kicks off with another inspirational video showing the impact of Google's products and services, with real world implications. It concludes saying, "let's make something that matters"</p></div><div class="live-content"><time datetime="2026-05-19T17:05:34+00:00">May 19, 2026 – 1:05 PM</time><h2 id="9-7-trillion-tokens-a-month-processed">9.7 trillion tokens a month processed</h2><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="YwBhht5LcjQuXSZySAzCdZ" name="Google I_O '26 Keynote 1-6-54 screenshot" alt="Sundar Pichai closeup at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/YwBhht5LcjQuXSZySAzCdZ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's Sundar Pichai steps out onto the stage with opening remarks, including a funny clip of his highlights over the past year.</p><p>Pichai goes onto explain how Gemini is being access by more people than ever, with 9.7 trillion tokens a month.</p></div><div class="live-content"><time datetime="2026-05-19T17:08:50+00:00">May 19, 2026 – 1:08 PM</time><h2 id="gemini-app-usage-continues-to-grow-at-a-rapid-rate">Gemini app usage continues to grow at a rapid rate</h2><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="72sg4ss3MMGxVpgA9Qva67" name="Google I_O '26 Keynote 1-10-48 screenshot" alt="AI Overviews monthly active users at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/72sg4ss3MMGxVpgA9Qva67.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Gemini app usage continues to grow and the numbers shared by Sundar Pichai is proof of that, surpassing 900 million active users with the Gemini app, which is 2x growth over the past year.</p></div><div class="live-content"><time datetime="2026-05-19T17:10:49+00:00">May 19, 2026 – 1:10 PM</time><h2 id="ask-youtube-rolling-out-makes-video-searches-better">Ask YouTube rolling out — makes video searches better</h2><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="nSMAbrWEpAsTAFZUg9FgwG" name="Google I_O '26 Keynote 1-12-39 screenshot" alt="Ask YouTube at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/nSMAbrWEpAsTAFZUg9FgwG.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's rolling out a new feature with YouTube called "Ask YouTube," which intelligently finds videos with the help of AI. These are digestible clips that are to the point, based on your questions and queries.</p></div><div class="live-content"><time datetime="2026-05-19T17:12:44+00:00">May 19, 2026 – 1:12 PM</time><h2 id="docs-live-makes-editing-easier-with-ai">Docs Live makes editing easier with AI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="K3r3JcnrcFRDVGZBe3XiPb" name="Google I_O '26 Keynote 1-15-19 screenshot" alt="A person browsing through a Docs Live chat at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/K3r3JcnrcFRDVGZBe3XiPb.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Docs Live is another powerful tool that makes creating documents easier with your voice using AI help. The demo looked pretty convincing at how well it functions.</p></div><div class="live-content"><time datetime="2026-05-19T17:15:40+00:00">May 19, 2026 – 1:15 PM</time><h2 id="tpus-make-a-huge-impact-to-processing-tokens">TPUs make a huge impact to processing tokens</h2><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="wzkxWuvf3uDrt8v84mUHMm" name="Google I_O '26 Keynote 1-17-3 screenshot" alt="Google's TPUs over the years" src="https://cdn.mos.cms.futurecdn.net/wzkxWuvf3uDrt8v84mUHMm.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Most consumers might not think much about how tokens are processed, but the numbers are staggering. With more people leaning on AI, Google's investing in more TPU development to keep up pace, which as Sundar Pichai bluntly says, makes a huge difference with latency.</p></div><div class="live-content"><time datetime="2026-05-19T17:19:42+00:00">May 19, 2026 – 1:19 PM</time><h2 id="gemini-omni-is-a-new-model-that-s-multi-modal">Gemini Omni is a new model that's multi-modal</h2><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="YCgxEMFNUkpv3y2cvUW6fT" name="Google I_O '26 Keynote 1-21-23 screenshot" alt="Demis Hassabis at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/YCgxEMFNUkpv3y2cvUW6fT.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Demis Hassabis is now on stage to talk more about models, with a focus on World models, which will be used to train AI bots. He goes on to talk about its latest model: Gemini Omni,</p><p>With Omni, its multi-modal capability can help generate videos using prompts, but it can be further refined through subsequent steps. You can edit videos with conversational languages, taking a simple selfie and transforming it to something else. </p></div><div class="live-content"><time datetime="2026-05-19T17:23:56+00:00">May 19, 2026 – 1:23 PM</time><h2 id="ai-content-verification-is-coming-to-chrome">AI content verification is coming to Chrome</h2><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="bcvsNrPxJceUm6HYSjFsLH" name="Google I_O '26 Keynote 1-26-55 screenshot" alt="AI detection rolling out to Chrome" src="https://cdn.mos.cms.futurecdn.net/bcvsNrPxJceUm6HYSjFsLH.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>This new feature can help better tell you if content you see is generated with AI or not. OpenAI is now going to be using Google's content verifcation, in addition to other partners.</p></div><div class="live-content"><time datetime="2026-05-19T17:25:54+00:00">May 19, 2026 – 1:25 PM</time><h2 id="gemini-3-5-flash-is-even-faster-versus-previous-models">Gemini 3.5 Flash is even faster versus previous models</h2><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="RPxAE8exA3t9jCxDMkcqHR" name="Google I_O '26 Keynote 1-28-14 screenshot" alt="Gemini 3 Models at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/RPxAE8exA3t9jCxDMkcqHR.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Gemini 3.5 Flash  combines frontier intelligence with actions. This model has been tweaked to work much faster with its output speed, beating other models. It's 4x faster in fact.</p></div><div class="live-content"><time datetime="2026-05-19T17:27:37+00:00">May 19, 2026 – 1:27 PM</time><p>Google Antigravity </p></div><div class="live-content"><time datetime="2026-05-19T17:33:33+00:00">May 19, 2026 – 1:33 PM</time><h2 id="google-antigravity-updates-make-programming-easier-for-developers">Google Antigravity updates make programming easier for developers</h2><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="zKRjLvKeqParDcZpBLGYyn" name="Google I_O '26 Keynote 1-31-35 screenshot" alt="Antigravity at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/zKRjLvKeqParDcZpBLGYyn.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Updates to Google Antigravity aims to assist programmers and developers with complex coding tasks. With this update, it's helping coders to create operating systems, including the ability to play Doom.</p></div><div class="live-content"><time datetime="2026-05-19T17:36:46+00:00">May 19, 2026 – 1:36 PM</time><h2 id="gemini-spark-handles-your-digital-life">Gemini Spark handles your digital 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="4zp4feXgDq5KFGgqcYtYBF" name="Google I_O '26 Keynote 1-40-18 screenshot" alt="Gemini Spark reveal at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/4zp4feXgDq5KFGgqcYtYBF.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Gemini Spark is coming to the Gemini app, a persoanl agent that handles you digital life. It runs on virtual machines in Google Cloud and works 24/7. It's powered by Gemini 3.5.</p></div><div class="live-content"><time datetime="2026-05-19T17:39:45+00:00">May 19, 2026 – 1:39 PM</time><h2 id="collaboration-is-going-to-get-a-big-boost-with-gemini-spark">Collaboration is going to get a big boost with Gemini Spark</h2><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="PqEqgbXvYWLptzDVh6WQpR" name="Google I_O '26 Keynote 1-42-38 screenshot" alt="Gemini Spark demo at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/PqEqgbXvYWLptzDVh6WQpR.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The live demo of Gemini Spark shows how this agent works across different services, like Google Docs, Gmail, and more, all to populate details and information. One example Google shows is trying to organize a party with Gemini Spark, which populates an RSVP tracker created in Google Sheets, including real time changes to it. Spark can also send follow up reminders to people who haven't RSVPed.</p></div><div class="live-content"><time datetime="2026-05-19T17:41:48+00:00">May 19, 2026 – 1:41 PM</time><h2 id="gemini-spark-works-across-devices-iphone-and-android-in-the-background">Gemini Spark works across devices, iPhone and Android, in the background</h2><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="79z8fWB68chyiyasbnkQ9f" name="Google I_O '26 Keynote 1-44-43 screenshot" alt="Gemini Spark on mobile at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/79z8fWB68chyiyasbnkQ9f.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Spark works on Android and iPhone, which syncs across all of your devices.  You basically send it your ideas and it does the rest. The demo on stage shows how you can send voice actions and Spark creates tasks in the background for it to run when you're not using your devices.</p></div><div class="live-content"><time datetime="2026-05-19T17:43:39+00:00">May 19, 2026 – 1:43 PM</time><h2 id="new-google-ai-ultra-plans-revealed">New Google AI Ultra plans revealed</h2><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="j2xnR4thcUYxKSBHZmPg36" name="Google I_O '26 Keynote 1-46-22 screenshot" alt="New Google AI Ultra plan at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/j2xnR4thcUYxKSBHZmPg36.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>If you intend on using these new models, Google's introducing new Google AI Ultra plans starting at $100 per month.</p></div><div class="live-content"><time datetime="2026-05-19T17:46:21+00:00">May 19, 2026 – 1:46 PM</time><h2 id="google-search-is-now-backed-by-gemini-3-5">Google Search is now backed by Gemini 3.5</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EcPu2BZknH5y8zxnhLagMW" name="Google I_O '26 Keynote 1-50-27 screenshot" alt="Google Search is AI Search at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/EcPu2BZknH5y8zxnhLagMW.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Next up, Google Search! It's now being turbocharged with Gemini 3.5, with the ability to perform complex tasks through search, like creating an itinerary. </p></div><div class="live-content"><time datetime="2026-05-19T17:50:12+00:00">May 19, 2026 – 1:50 PM</time><h2 id="we-re-entering-the-era-of-search-agents">'We're entering the era of search agents'</h2><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="SFKiXSPH9iWSZfDdRuvmYe" name="Google I_O '26 Keynote 1-51-43 screenshot" alt="New intelligent search bar at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/SFKiXSPH9iWSZfDdRuvmYe.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>"We're entering the era of search agents." Google Search is evolving by tapping into multiple search agents, so you can get more done. One of the examples shows how Google Search works with different agents in the background, like learning about stock price changes that happen in real time, along with information that's relevant to your searches. </p></div><div class="live-content"><time datetime="2026-05-19T17:53:51+00:00">May 19, 2026 – 1:53 PM</time><h2 id="the-best-version-of-search-is-the-one-that-works-for-you">'The best version of search is the one that works for you'</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8UXn4qhoJJr7B5c5VCBPxP" name="Google I_O '26 Keynote 1-56-32 screenshot" alt="Agentic coding in search at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/8UXn4qhoJJr7B5c5VCBPxP.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Robby Stein from Google is on stage to demo agentic capabilities of Gemini. "We believe the best version of search is the one that works for you," explains Stein.</p><p>With this new AI overview, you can get interactive experience in search, like learning about black holes. Search will even generate animations and custom UIs on different search topics.</p></div><div class="live-content"><time datetime="2026-05-19T17:56:20+00:00">May 19, 2026 – 1:56 PM</time><h2 id="search-can-create-tasks-at-scale">Search can create tasks at scale</h2><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="8SwTiHDCAQvULdMRXHhg9m" name="Google I_O '26 Keynote 1-59-54 screenshot" alt="Generative AI in search demo at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/8SwTiHDCAQvULdMRXHhg9m.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Search has the ability to help create mini apps for you, perfect for handling tasks at scale. The example of this is finding ideas for family fun things to do during the weekend, and Search creates a weekend planner from scratch all for you.</p></div><div class="live-content"><time datetime="2026-05-19T18:02:37+00:00">May 19, 2026 – 2:02 PM</time><h2 id="universal-commerce-protocol-open-standard-for-shopping">Universal Commerce Protocol open standard for shopping</h2><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="Y7W2kM9avB8n9WxTg47hNZ" name="Google I_O '26 Keynote 2-4-18 screenshot" alt="Product listings on Google Search at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/Y7W2kM9avB8n9WxTg47hNZ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Vidhya Srinvasan from Google is on stage to talk about shopping with Google, which all starts with Shopping Graph. Universal Commerce Protocol is an open standard that's being rolled out to several Google products.</p></div><div class="live-content"><time datetime="2026-05-19T18:07:27+00:00">May 19, 2026 – 2:07 PM</time><h2 id="universal-cart-is-a-truly-intelligent-cart">'Universal Cart is a truly intelligent cart'</h2><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="amzczbK7sMHc5QhB8GdM4K" name="Google I_O '26 Keynote 2-10-11 screenshot" alt="Universal Cart availability at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/amzczbK7sMHc5QhB8GdM4K.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>"Universal Cart is a truly intelligent cart," explains Srinvasan. This new feature will look up price changes, history, and adjust you price carts with help from agents. What's really fascinating is how intelligent it is, like know that the motherboard you're buying isn't compatible with processor you've added, so it'll automatically know that and provide you with choices.</p></div><div class="live-content"><time datetime="2026-05-19T18:14:06+00:00">May 19, 2026 – 2:14 PM</time><h2 id="gemini-app-gets-updated-with-neural-expressive-experience">Gemini app gets updated with Neural Expressive experience</h2><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="T5Js8ZsVqw63uPoNCxFzaN" name="Google I_O '26 Keynote 2-17-51 screenshot" alt="Neural Expressive rollout timeline at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/T5Js8ZsVqw63uPoNCxFzaN.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Gemini app is getting big changes, including a new experience built from the ground up with Neural Expressive. design language. It's a visual change that will include interactive images with its responses, timelines with generated videos, and more. Neural Expressive is rolling out to Android, iOS, and the web.</p><p>Gemini Omni is also coming to the app, like the ability to create and edit videos.</p></div><div class="live-content"><time datetime="2026-05-19T18:15:31+00:00">May 19, 2026 – 2:15 PM</time><h2 id="gemini-omni-s-ability-to-generate-video-is-impressive">Gemini Omni's ability to generate video is impressive</h2><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="LnhafeLXZcWPxsVtZWPnQZ" name="Google I_O '26 Keynote 2-19-35 screenshot" alt="Gemini Omni rollout at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/LnhafeLXZcWPxsVtZWPnQZ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Gemini Omni got demoed at I/O, showing how you can create a video you've uploaded with additional prompts to transform it to something else, like being able to rotate the framing and adding other elements.</p></div><div class="live-content"><time datetime="2026-05-19T18:17:40+00:00">May 19, 2026 – 2:17 PM</time><h2 id="daily-brief-finds-important-information">Daily Brief finds important information</h2><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="HrHiYhKic7ogmzVKumwNre" name="Google I_O '26 Keynote 2-20-21 screenshot" alt="Daily Brief at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/HrHiYhKic7ogmzVKumwNre.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Daily Brief finds the most important things in you data, and presents them in digestible form.</p></div><div class="live-content"><time datetime="2026-05-19T18:20:37+00:00">May 19, 2026 – 2:20 PM</time><h2 id="gemini-app-is-coming-to-macos">Gemini app is coming to MacOS</h2><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="My9aqpwViZBrf4ydq3WKxJ" name="Google I_O '26 Keynote 2-23-30 screenshot" alt="Gemini app on MacOS at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/My9aqpwViZBrf4ydq3WKxJ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>If you're using MacOS, you'll be happy to know that the Gemini app is coming to it. Apple users will be able to access many of the new agents and features with Gemini on MacOS.</p></div><div class="live-content"><time datetime="2026-05-19T18:27:48+00:00">May 19, 2026 – 2:27 PM</time><h2 id="google-pics-and-stitch-makes-creation-a-breeze">Google Pics and Stitch makes creation a breeze</h2><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="zFKWJYQyJpHNdzhzZkqM5C" name="Google I_O '26 Keynote 2-30-30 screenshot" alt="Stitch at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/zFKWJYQyJpHNdzhzZkqM5C.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google Pics is an image creation and editing tool, from flyers to infographics. It's rolling out this summer.</p><p>Meanwhile, Stitch turns rough ideas to beautiful designs. For example, it can be used to create interfaces using prompts or your voice. You can create web sites in real time, using powerful tools to design a website.</p></div><div class="live-content"><time datetime="2026-05-19T18:30:52+00:00">May 19, 2026 – 2:30 PM</time><h2 id="gemini-omni-agent-tools-and-music-are-rolling-out-to-google-flow">Gemini Omni, Agent, Tools, and Music are rolling out to Google Flow</h2><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="ESxqzxZmfdWvvjYhKbtq8e" name="Google I_O '26 Keynote 2-34-24 screenshot" alt="Agent taking on multiple prompts at once with image editing at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/ESxqzxZmfdWvvjYhKbtq8e.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>If you're looking to create more videos, Google Flow is getting a big boost to generate new characters and elements by simply typing your request. On top of that, your agents can take multiple actions at one - like taking a single image and transforming it into several different clips. You'll be able to edit at scale.</p></div><div class="live-content"><time datetime="2026-05-19T18:34:14+00:00">May 19, 2026 – 2:34 PM</time><h2 id="google-flow-music-takes-your-boring-music-and-makes-it-professionally-mixed">Google Flow Music takes your boring music and makes it professionally mixed</h2><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="LvGn4YfD7EFW5cPYceCPrm" name="Google I_O '26 Keynote 2-35-46 screenshot" alt="Sharing creations in Google Flow at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/LvGn4YfD7EFW5cPYceCPrm.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Another exciting demo shows Google Flow Music takes and how a simple piano track can be transformed into a complete musical track that sounds professionally mixed.</p></div><div class="live-content"><time datetime="2026-05-19T18:36:28+00:00">May 19, 2026 – 2:36 PM</time><h2 id="our-first-audio-glasses-will-arrive-this-fall">'Our first audio glasses will arrive this fall'</h2><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="rn9KMHGYNVfJHX5xCw2tcR" name="Google I_O '26 Keynote 2-39-29 screenshot" alt="Audio Glasses release date reveal at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/rn9KMHGYNVfJHX5xCw2tcR.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>If you're eager to know about about Android XR, Google says that "our first audio glasses will arrive this fall." So farm Gentle Monster and Warby Parker are partners in creating these glasses in conjunction with Samsung. And yes, they'll pair with Android and iOS devices.</p></div><div class="live-content"><time datetime="2026-05-19T18:39:39+00:00">May 19, 2026 – 2:39 PM</time><h2 id="first-look-at-samsung-s-new-intelligent-eyewear">First look at Samsung's new 'intelligent eyewear'</h2><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="aLAjzG67pBaDTCedp7R3s3" name="Google I_O '26 Keynote 2-43-20 screenshot" alt="Gentle Monster and Warby Parker Intelligent Glasses at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/aLAjzG67pBaDTCedp7R3s3.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Samsung's smart glasses introduces intelligent eyewear, with a focus on design and style. Really, the premise reminds us awfully of the Amazon Echo Frames - since it's an audio-focus experience.</p></div><div class="live-content"><time datetime="2026-05-19T18:44:05+00:00">May 19, 2026 – 2:44 PM</time><h2 id="order-coffee-through-your-glasses-with-gemini">Order coffee through your glasses with Gemini</h2><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="jeA3RjQ7C6qp4Z8eVnZHr7" name="Google I_O '26 Keynote 2-44-7 screenshot" alt="Intelligent Eyewear demo at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/jeA3RjQ7C6qp4Z8eVnZHr7.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Maps integrate with Samsung's intelligent eyewear, including getting directions. Gemini can also perform automated tasks, just like on the Galaxy S26, like using Doordash for a coffee order. The way it functions is basically the same as Gemini on the Galaxy S26, so it's not something special we haven't experienced before. Finally, it understands contextual information. But the biggest reveal is that it has a camera!</p></div><div class="live-content"><time datetime="2026-05-19T18:52:24+00:00">May 19, 2026 – 2:52 PM</time><h2 id="computational-discovery-helps-to-make-deliver-accurate-predictions">Computational Discovery helps to make deliver accurate predictions</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="BofbyKov68NJ6bppoG6R6C" name="Google I_O '26 Keynote 2-52-0 screenshot" alt="Gemini for Science at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/BofbyKov68NJ6bppoG6R6C.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Gemini for Science offers tools to accelerate research and make predictions, like hurricanes.</p></div><div class="live-content"><time datetime="2026-05-19T19:11:06+00:00">May 19, 2026 – 3:11 PM</time><h2 id="will-shopping-habit-change-with-google-s-universal-cart">Will shopping habit change with Google's Universal Cart?</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7641669425636166926" data-video-id="7641669425636166926" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7641669530284083981">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>Universal Cart could change the way we all shop online, which uses AI to proactively check your cart. Just take a peek at the demo of it on stage during Google I/O 2026 to see how the AI knows what parts you're buying for a new PC build.</p></div><div class="live-content"><time datetime="2026-05-19T19:17:19+00:00">May 19, 2026 – 3:17 PM</time><h2 id="should-meta-be-afraid">Should Meta be afraid?</h2><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="B7ui8vN7aD9FFABUbzjQAh" name="Google I_O '26 Keynote 2-49-13 screenshot" alt="Intelligent Eyewear Fact Sheet at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/B7ui8vN7aD9FFABUbzjQAh.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's collaboration with Samsung brought two working demos of its "intelligent eyewear" devices that aim to bring Gemini in a whole new way with glasses designed from Warby Parker and Gentle Monster.</p><p>What's surprising about them, is the deep integration of Gemini to perform tasks all through voice commands. What do you think? Are they enough to make Meta and its partners afraid?</p></div><div class="live-content"><time datetime="2026-05-19T19:42:13+00:00">May 19, 2026 – 3:42 PM</time><h2 id="gemini-spark-is-the-assistant-i-ve-been-waiting-for">Gemini Spark is the assistant I've been waiting 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="weUnmka5Q7CQ5N7nFMkUD3" name="Google I_O '26 Keynote 1-46-6 screenshot" alt="Gemini Spark rollout reveal at Google I/O 2026" src="https://cdn.mos.cms.futurecdn.net/weUnmka5Q7CQ5N7nFMkUD3.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p><a href="https://www.tomsguide.com/ai/google-gemini/google-unveils-gemini-spark-a-24-7-personal-ai-agent-that-could-be-a-game-changer-for-agentic-ai">Google Spark </a>is one of the latest AI agents introduced during the keynote. What's special about this one is that it lives in the cloud, where the agent will proactively work on tasks on its own. It behaves differently because it'll continue to work in the background.</p><p>Personally, it's the AI agent I've been waiting for because it means that I can send it tasks and it'll track, manage, and proactively work on it. If you rewatch the live event, you'll see how it can be used to help with wedding plans, including the ability to track RSVPs, send reminders to people, and more.</p></div><div class="live-content"><time datetime="2026-05-19T19:59:47+00:00">May 19, 2026 – 3:59 PM</time><h2 id="youtube-s-about-to-get-even-more-helpful">YouTube's about to get even more helpful</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7641654401370787086" data-video-id="7641654401370787086" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7641654548948060942">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>Just like everyone else, I spent a great deal of time on YouTube watching all sorts of videos. But a new feature coming soon will make it even more helpful.</p><p><a href="https://www.tomsguide.com/how-to/youtube-now-lets-you-ask-its-ai-questions-about-videos-heres-how-it-works">Ask YouTube</a> is an AI feature that better tailors results based on your search. For example, if you're wondering how to properly clean the sensor in a specific camera, you can send this inquiry to YouTube and it'll provide you with meaningful video results. Not only will it find videos that directly answer your question, but it'll even start the video at the exact place where it answers it.</p></div><div class="live-content"><time datetime="2026-05-19T20:30:57+00:00">May 19, 2026 – 4:30 PM</time><h2 id="checking-out-ai-mode">Checking out AI mode </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:8064px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="oKL96Bq8nwsBrBnMaxFMLX" name="IMG_4958" alt="Google I/O 2026 - AI mode, planner mode in search" src="https://cdn.mos.cms.futurecdn.net/oKL96Bq8nwsBrBnMaxFMLX.jpg" mos="" align="middle" fullscreen="" width="8064" height="4536" 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 are on site at Google I/O and checking out the various AI tools and devices that were announced today.</p><p>In this image, we're being shown the planner features in Google Search that can create weekend planners for you.</p><p>It's part of the new ability for Search to create mini apps for you and while connecting to other Google apps like your calendar.</p></div><div class="live-content"><time datetime="2026-05-19T21:09:48+00:00">May 19, 2026 – 5:09 PM</time><h2 id="be-sure-to-follow-our-tiktok">Be sure to follow our TikTok</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7641657760362417422" data-video-id="7641657760362417422" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7641663067629832974">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>Tom's Guide is on TikTok where we're showing off what we see at Google I/O including hands-on demonstrations with smart glasses, new Search tools and more. </p><p>Be sure to give us a follow if you're on that platform.</p></div><div class="live-content"><time datetime="2026-05-19T21:30:58+00:00">May 19, 2026 – 5:30 PM</time><h2 id="eyes-on-with-google-s-prototype-glasses">Eyes on with Google's prototype glasses</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/A5rTQUpSi97WRuFSuGvk4k.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/u5FjUQEQaeEiQbXJRZGZAk.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8PEsM2DhDQdjPjkTV7eDBm.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sY5Um9fimEqD5cbzMfXWWk.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/3nfoHMCdwn6vGkqjSCErqk.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jxT3ZDp9eSQKiqNupqPzUk.jpg" alt="Google I/O 2026 - Eyes on with the Google's prototype smart glasses" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>We've had a chance to go eyes on with a prototype of Google's smart glasses. </p><p>The display was turned off so we could experience it as a version of the future audio only model. It does seem reminiscent of the Ray-Ban Meta Wayfarer shades.</p><p>We didn't order any cold brews though.</p></div><div class="live-content"><time datetime="2026-05-19T22:00:49+00:00">May 19, 2026 – 6:00 PM</time><h2 id="project-aura-makes-an-appearance">Project Aura makes an appearance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GP59e3HbND8F7mPT4KVzj3" name="IMG_8887" alt="Google I/O 2026 - Xreal Project Aura glasses" src="https://cdn.mos.cms.futurecdn.net/GP59e3HbND8F7mPT4KVzj3.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Google and its partnerships have at least three smart glasses launching this year. </p><p>One of them is <a href="https://www.tomsguide.com/computing/smart-glasses/xreals-project-aura-reveals-the-exciting-true-intentions-for-android-xr-but-will-anyone-actually-wear-them">Xreal's Project Aura</a>. You can see the display glasses above with a puck that is supposed to feature a Qualcomm Snapdragon chip that helps enable many of the features we can expect. </p></div><div class="live-content"><time datetime="2026-05-19T22:32:28+00:00">May 19, 2026 – 6:32 PM</time><h2 id="live-demo-of-google-s-audio-glasses">Live demo of Google's Audio Glasses</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7641681775265205517" data-video-id="7641681775265205517" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7641681872707275534">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>During the Google I/O keynote speech, there was a live demo of Google's audio glasses showcasing the Gemini capabilities without the need to pull out your phone.</p></div><div class="live-content"><time datetime="2026-05-19T23:02:47+00:00">May 19, 2026 – 7:02 PM</time><h2 id="google-ai-ultra-changes-the-game">Google AI Ultra changes the 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="o74mitjGMdgLu6WXJK7N6n" name="🎬 Watch The Android Show _ I_O Edition 2026 9-11 screenshot" alt="Gemini Intelligence" src="https://cdn.mos.cms.futurecdn.net/o74mitjGMdgLu6WXJK7N6n.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>During Google I/O 2026, the company unveiled a new AI Ultra tier that costs $100 per month. It's meant for devs, creators and power users. </p><p>This includes the newly unveiled Gemini Spark model which Google calls a "24/7 AI agent."</p><p>My colleague Amanda Caswell gets into way <a href="https://www.tomsguide.com/ai/googles-new-usd100-ai-ultra-plan-just-changed-the-ai-race-and-gemini-spark-is-the-biggest-reason-why">more depth here</a> suffice to say, Google is committed to AI agents and assistants that actively manage information for users.</p></div><div class="live-content"><time datetime="2026-05-19T23:35:32+00:00">May 19, 2026 – 7:35 PM</time><h2 id="intelligent-eyewear-and-gemini-edit-a-photo">Intelligent eyewear and Gemini edit a photo</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/H5EHwcSVQG9mNPxCUwW7Fe.jpg" alt="Google I/O 2026 - Using Intelligent Eyewear to make a superhero" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XfvBw3t2bdbUbZUZRkQjHe.jpg" alt="Google I/O 2026 - Using Intelligent Eyewear to make a superhero" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>While testing out Intelligent Eyewear we gave it a prompt to turn my colleague Paul Antill. </p><p>The prompt was, "“Take a picture and make him look like a superhero."</p><p>It did, but it also changed the name on his media tag to read "Paul Arnold." </p><p>So meet Super Paul Arnold or GL, the Googler? Also, it made his face weird more cartoonish.</p></div><div class="live-content"><time datetime="2026-05-20T10:45:24+00:00">May 20, 2026 – 6:45 AM</time><h2 id="hands-on-with-google-s-intelligent-eyewear">Hands-on with Google's 'Intelligent Eyewear'</h2><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="ipcxBr2BHn6kFeNHc4uNa6" name="Android XR" alt="Android XR" src="https://cdn.mos.cms.futurecdn.net/ipcxBr2BHn6kFeNHc4uNa6.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The dust has settled on Google's I/O 2026 keynote, but the developer conference will continue to run for the next few days as we start to get our hands on the new tools revealed on stage. One of the most interesting is Google’s “Intelligent Eyewear,” and how it stacks up against the Ray-Ban Meta smart glasses.</p><p>Our Computing Editor, Jason England, is out at I/O this week and has got some hands-on time with the prototype and you can <a href="https://www.tomsguide.com/computing/smart-glasses/i-tested-googles-intelligent-eyewear-and-found-the-smart-glasses-that-will-defeat-ray-ban-meta?hasComeFromProof=true">read his initial verdict right here</a>. Bottom line? Mark Zuckerberg has a real fight on his hands. </p></div><div class="live-content"><time datetime="2026-05-20T11:32:32+00:00">May 20, 2026 – 7:32 AM</time><h2 id="google-s-new-search-is-great-unless-you-re-a-journalist">Google's new Search is great — unless you're a journalist</h2><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="FzCR7sQo3EYNPbmmKLTFJT" name="Google search" alt="Google search" src="https://cdn.mos.cms.futurecdn.net/FzCR7sQo3EYNPbmmKLTFJT.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>We got to take a look at Google's redefined Search box at I/O and it's fair to say the added power of AI tools is an exciting prospect when it comes to making sense of a noisy and confusing internet. </p><p>But what's clearly a generational leap in making the wider internet more personable and accessible also has big implications. It could be a very worrying sign for publications and other businesses that exist on referral traffic from Google to survive. One thing's for sure: the days of seeing 10 blue links beneath your Google search are well and truly dead.    </p><ul><li><strong>Read more:</strong> <a href="https://www.tomsguide.com/computing/internet/i-hate-that-i-love-googles-new-ai-powered-search-bar-it-makes-the-internet-easier-to-digest-but-my-career-is-cooked-now">I hate that I love Google’s new AI-powered search bar — it makes the internet easier to digest, but my career is cooked now</a></li></ul></div><div class="live-content"><time datetime="2026-05-20T15:51:59+00:00">May 20, 2026 – 11:51 AM</time><h2 id="could-we-see-more-improvements-to-the-android-desktop-mode">Could we see more improvements to the Android desktop mode?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4106px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="4vwYuFZx9Ht9E3pmZ6BArV" name="Android 16 Desktop Mode On Pixel 10" alt="Pixel 10 running Android 16 desktop mode." src="https://cdn.mos.cms.futurecdn.net/4vwYuFZx9Ht9E3pmZ6BArV.jpg" mos="" align="middle" fullscreen="" width="4106" height="2310" 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>Last year, Google quietly revealed its new <a href="https://www.tomsguide.com/phones/android-phones/android-16-desktop-mode-googles-best-kept-secret-got-a-quiet-reveal-at-i-o">Android desktop mode</a>, which was developed developed with the help of Samsung. We could possibly hear more about what other changes and improvements is in store for the desktop mode during day 2 of Google I/O 2026.</p><p>Available to the most new Pixel phones, <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-this-hidden-desktop-mode-on-my-pixel-9-pro-xl-google-needs-to-bring-this-to-all-android-phones">we've tried out this desktop mode</a> and said it's a good start, but certainly trails what <a href="https://www.tomsguide.com/phones/samsung-phones/i-ditched-my-laptop-for-2-weeks-for-the-galaxy-z-fold-6-heres-what-happened">Samsung DeX</a> offers. Since then, we've seen Motorola's version get updated in a big way with <a href="https://www.tomsguide.com/phones/motorola-phones/motorolas-new-smart-connect-features-are-a-super-practical-use-of-ai">Smart Connect</a> for the <a href="https://www.tomsguide.com/phones/motorola-phones/this-underrated-motorola-razr-fold-feature-makes-me-more-productive-google-apple-and-samsung-should-take-notice">Razr Fold</a>.</p></div><div class="live-content"><time datetime="2026-05-20T16:37:45+00:00">May 20, 2026 – 12:37 PM</time><h2 id="meta-has-a-lot-of-work-ahead-of-itself">Meta has a lot of work ahead of itself</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4439px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="H3x5zw3buY9ycGGb8bFodL" name="IMG_4488" alt="Oakley Meta HSTN smart glasses" src="https://cdn.mos.cms.futurecdn.net/H3x5zw3buY9ycGGb8bFodL.jpg" mos="" align="middle" fullscreen="" width="4439" height="2497" 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 its debut during the keynote yesterday, Google's positioning itself in a very good way with its upcoming <a href="https://www.tomsguide.com/computing/smart-glasses/forget-meta-ray-bans-samsungs-intelligent-eyewear-glasses-just-launched-at-google-i-o-and-theyre-coming-this-fall">Intelligent Eyewear devices</a>, developed in collaboration with Samsung.</p><p>While Meta has been in the business of making smart glasses for a long while now, with notable models like the <a href="https://www.tomsguide.com/computing/smart-glasses/ray-ban-meta-gen-2-review">Ray-Ban Meta</a> and <a href="https://www.tomsguide.com/computing/smart-glasses/meta-ray-ban-display-review">Meta Ray-Ban Display</a>, there are features they don't have that Google's upcoming glasses offer. Clearly there's a hump to overcome, but with Meta Connect 26 happening in September, it's <a href="https://www.tomsguide.com/computing/smart-glasses/meta-has-five-months-to-fix-these-3-things-before-its-ray-bans-get-smoked-by-googles-intelligent-eyewear">going to need to catch up in a big way</a>.</p></div><div class="live-content"><time datetime="2026-05-20T17:37:56+00:00">May 20, 2026 – 1:37 PM</time><h2 id="googlebook-was-a-no-show-at-google-i-o-2026">Googlebook was a no-show at Google I/O 2026</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4096px;"><p class="vanilla-image-block" style="padding-top:74.27%;"><img id="uCx95t8GvqBqx2ARtBSDuH" name="Googlebook-4" alt="Googlebook" src="https://cdn.mos.cms.futurecdn.net/uCx95t8GvqBqx2ARtBSDuH.jpg" mos="" align="middle" fullscreen="" width="4096" height="3042" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google absolutely stirred some attention when it revealed its <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebook </a>during last week's Android Show, but it was a no-show at the Google I/O 2026 keynote. While these premium laptops are fundamentally tied to Gemini Intelligence, we were hopeful to learn more about them, especially what its hardware partners intend to do with their versions.</p></div><div class="live-content"><time datetime="2026-05-20T18:44:43+00:00">May 20, 2026 – 2:44 PM</time><h2 id="xreal-s-android-xr-glasses-could-make-you-rethink-about-google-s-intelligent-eyewear">Xreal’s Android XR glasses could make you rethink about Google's intelligent eyewear</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3019px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="j2c8YKieMuBjrk6wEPQhGJ" name="Xreal Project Aura" alt="Xreal Project Aura" src="https://cdn.mos.cms.futurecdn.net/j2c8YKieMuBjrk6wEPQhGJ.jpg" mos="" align="middle" fullscreen="" width="3019" height="1698" 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's a lot of different types of smart glasses vying for consumer recognition and Android XR is one of them, which shouldn't be mistaken for Google's "intelligent eyewear" glasses it showed off at the Google I/O 2026 keynote.</p><p>Our very own <a href="https://www.tomsguide.com/author/jason-england">Jason England</a> got a first <a href="https://www.tomsguide.com/computing/smart-glasses/xreal-android-xr-project-aura-smart-glasses-hands-on-review">hands-on look at Xreal's Project Aura</a>, which are AR glasses in the same vein as Samsung's Galaxy XR and Apple's Vision Pro headset. But unlike them, Xreal's version looks more like an ordinary pair of glasses that looks less conspicuous.</p><p>After trying them out at Google I/O 2026, England's quite impressed by them, so much so that he says that "these are a glimpse into the exciting future of AR glasses."</p></div><div class="live-content"><time datetime="2026-05-20T19:52:55+00:00">May 20, 2026 – 3:52 PM</time><h2 id="gemini-omni-takes-video-generation-to-the-next-level">Gemini Omni takes video generation to the next level</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/eIZRs2jkGfY" allowfullscreen></iframe></div></div><p>If you love video as much as we do, then you might know how involved it can be putting together a compelling video that engages people. With <a href="https://www.tomsguide.com/ai/gemini-omni-flash-can-create-and-edit-videos-with-your-voice-and-it-feels-like-the-future-of-multimodal-ai">Gemini Omni</a>, it's taking video creation to a whole new level.</p><p>This generative service can do amazing things, like take a photo you give to it and generate several videos based on different prompts. You can also reimagine what they look like if you're looking for something entirely unique. Either way, check out what it's capable above in the video above.</p></div><div class="live-content"><time datetime="2026-05-20T20:53:37+00:00">May 20, 2026 – 4:53 PM</time><h2 id="apple-can-t-afford-to-lose-more-ground-to-google">Apple can't afford to lose more ground to Google</h2><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="6fYmPYNJsFjKuJQkWsenUE" name="tim cook.GettyImages-2218819259" alt="Tim Cook at WWDC 2025" src="https://cdn.mos.cms.futurecdn.net/6fYmPYNJsFjKuJQkWsenUE.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p>Google continues to push the boundaries for AI, evident in all of the new Gemini models and features introduced at the I/O 2026 keynote and Gemini Intelligence features from last week's Android Show.</p><p>Considering how Google Pixel phones have some of the best AI features around, it really puts the pressure on Apple, which is slated to host its <a href="https://www.tomsguide.com/phones/iphones/wwdc-2026">WWDC 2026</a> developers conference next month. We know that Apple's going to tap Gemini to power its new Siri, but what to degree is still unknown. Nevertheless, Apple can't afford to lose more ground in the AI race.</p></div><div class="live-content"><time datetime="2026-05-20T21:37:40+00:00">May 20, 2026 – 5:37 PM</time><h2 id="android-auto-is-about-to-be-way-more-dynamic">Android Auto is about to be way more dynamic</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="qgztpL33vsS7TcKbAuweqi" name="Android Auto at Google I/O 2026" alt="Android Auto at Google I/O 2026." src="https://cdn.mos.cms.futurecdn.net/qgztpL33vsS7TcKbAuweqi.jpg" mos="" align="middle" fullscreen="" width="6000" height="3376" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Jason England)</span></figcaption></figure><p>CarPlay Ultra was meant to shake things up when it was first introduced last year, with an emphasis on deeper integration with cars, but its lack of support from car makers has fizzled it somewhat.</p><p><a href="https://www.tomsguide.com/phones/android-auto-is-about-to-change-the-way-you-drive-3d-google-maps-redesigned-interface-video-support-gemini-and-more">Android Auto</a>, on the other hand, is about to get its biggest makeover in years with a new dynamic interface that adapts to different sized displays <strong>— </strong>and not to mention, multiple screens within a car</p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to watch Google I/O 2026 and all the announcements to expect ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google has spent the past year making Gemini unavoidable. Today, at its annual I/O developer<a href="https://io.google/2026/"> </a>conference, it gets to show whether that bet is paying off.</p><p>Today's keynote streams live from the Shoreline Amphitheatre in Mountain View, California hosted by CEO Sundar Pichai. It starts at 10 am Pacific (1 pm Eastern, 6 pm BST) and typically runs 90 to 120 minutes. </p><p>To catch every moment as it happens, make sure to follow along with our <a href="https://www.tomsguide.com/phones/live/google-i-o-2026-live">live blog</a>! Now, let's dive into exactly where you can stream the event. </p><h2 id="how-to-watch-google-i-o">How to watch Google I/O </h2><p>Tuning into Google I/O is straightforward. The entire event is streaming for free at <a href="https://io.google/" target="_blank">io.google</a> and on <a href="https://www.youtube.com/Google" target="_blank">Google’s own YouTube channel,</a> with no sign-in or account required. </p><p>The stream will include live captions, and an instant replay will be available the moment the broadcast wraps up.</p><section class="howto-block">                    <h3>What to expect</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/PLSJKiA3yqKkSVySTkJqgk.jpg"                                        alt="Google I/O 2025 logo at keynote event."                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/PLSJKiA3yqKkSVySTkJqgk.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>The headliners are Android 17, a round of Gemini AI updates, and a first proper look at Android XR smart glasses — wearables built with Samsung, Xreal, Gentle Monster, and Warby Parker that are due to launch later this year. </p><p>Google pre-announced a lot of the <a href="https://www.tomsguide.com/phones/android-phones/android-17-io-2026-upgrades">Android 17 upgrades already</a>, but I/O is where the full picture comes together: AI-assisted task automation through Gemini Intelligence, improved voice recognition, a redesigned Android Auto, and new 3D emoji are all among the new features. </p><p>Gemini itself is expected to get a significant upgrade, <a href="https://www.tomsguide.com/phones/live/the-android-show-google-i-o-edition-live-all-the-latest-android-gemini-ai-and-android-xr-news-as-it-happens">including a rumoured "Omni" model</a> focused on video generation. Expect Google to spend considerable time showing how Gemini now threads through Search, Android, and its creative tools, including <a href="https://www.tomsguide.com/ai/google-gemini/how-to-use-google-flow-the-new-ai-video-generator-meant-for-filmmakers">Flow</a>. </p><p>Also on the agenda: <a href="https://www.tomsguide.com/computing/laptops/googlebooks-vs-chromebooks">Googlebooks,</a> the new Android-powered laptop category, with Acer, HP, Lenovo, and Dell all building hardware for a launch by the end of the year. </p></p>                </section><h2 id="the-part-i-m-most-excited-about">The part I'm most excited about </h2><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="JEfMgj8h9nsyU7prc2eMfd" name="Google I_O '25 Keynote 45-22 screenshot" alt="Google I/O 2025" src="https://cdn.mos.cms.futurecdn.net/JEfMgj8h9nsyU7prc2eMfd.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: Google)</span></figcaption></figure><p>Google I/O almost always saves <em>something.</em> Previous years have produced surprise model announcements, unexpected hardware, and significant pivots to core products like Search and Photos. </p><p>Last year the story turned out to be how deeply Gemini had been woven into everything. This year, the equivalent reveal could come from almost any direction.</p><p>Let’s not forget the live demo wildcard. Google’s on-stage tech previews have a rich history of going off-script, look no further than the Sabrina Carpenter Gemini hiccup at the Pixel 9 event. Yet, for every awkward glitch, just as many moments go according to plan. </p><p>Either way, they tend to be the watercooler moments people are still buzzing about the next morning. That alone is worth keeping a tab open for.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O9RaMX"></div>                            </div>                            <script src="https://kwizly.com/embed/O9RaMX.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/computing/search-engines/i-finally-figured-out-how-to-turn-off-googles-ai-overviews-and-search-is-actually-useful-again">Tired of Google's AI Overviews? Three easy workarounds to bring back traditional search</a></li><li><a href="https://www.tomsguide.com/computing/stop-letting-google-track-your-every-move-how-to-clear-your-search-history-in-2026">Stop letting Google track your every move — how to clear your search history in 2026</a></li><li><a href="https://www.tomsguide.com/computing/where-did-your-google-drive-storage-go-5-hidden-space-hogs-you-can-delete-now">Where did your Google Drive storage go? 5 hidden space-hogs you can delete now</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/how-to-watch-google-i-o-2026-and-what-announcements-to-expect</link>
                                                                            <description>
                            <![CDATA[ Learn when Google I/O 2026 starts, how to watch the livestream, and what announcements are likely to arrive. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3dPccnddxtd9Xs4pBUPoxU</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/cB8rGUaUPPo8wR7py9NdmF-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 19 May 2026 11:06:59 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android 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/cB8rGUaUPPo8wR7py9NdmF-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google I/O 2025.]]></media:description>                                                            <media:text><![CDATA[Google I/O 2025.]]></media:text>
                                <media:title type="plain"><![CDATA[Google I/O 2025.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/cB8rGUaUPPo8wR7py9NdmF-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google has spent the past year making Gemini unavoidable. Today, at its annual I/O developer<a href="https://io.google/2026/"> </a>conference, it gets to show whether that bet is paying off.</p><p>Today's keynote streams live from the Shoreline Amphitheatre in Mountain View, California hosted by CEO Sundar Pichai. It starts at 10 am Pacific (1 pm Eastern, 6 pm BST) and typically runs 90 to 120 minutes. </p><p>To catch every moment as it happens, make sure to follow along with our <a href="https://www.tomsguide.com/phones/live/google-i-o-2026-live">live blog</a>! Now, let's dive into exactly where you can stream the event. </p><h2 id="how-to-watch-google-i-o">How to watch Google I/O </h2><p>Tuning into Google I/O is straightforward. The entire event is streaming for free at <a href="https://io.google/" target="_blank">io.google</a> and on <a href="https://www.youtube.com/Google" target="_blank">Google’s own YouTube channel,</a> with no sign-in or account required. </p><p>The stream will include live captions, and an instant replay will be available the moment the broadcast wraps up.</p><section class="howto-block">                    <h3>What to expect</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/PLSJKiA3yqKkSVySTkJqgk.jpg"                                        alt="Google I/O 2025 logo at keynote event."                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/PLSJKiA3yqKkSVySTkJqgk.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>The headliners are Android 17, a round of Gemini AI updates, and a first proper look at Android XR smart glasses — wearables built with Samsung, Xreal, Gentle Monster, and Warby Parker that are due to launch later this year. </p><p>Google pre-announced a lot of the <a href="https://www.tomsguide.com/phones/android-phones/android-17-io-2026-upgrades">Android 17 upgrades already</a>, but I/O is where the full picture comes together: AI-assisted task automation through Gemini Intelligence, improved voice recognition, a redesigned Android Auto, and new 3D emoji are all among the new features. </p><p>Gemini itself is expected to get a significant upgrade, <a href="https://www.tomsguide.com/phones/live/the-android-show-google-i-o-edition-live-all-the-latest-android-gemini-ai-and-android-xr-news-as-it-happens">including a rumoured "Omni" model</a> focused on video generation. Expect Google to spend considerable time showing how Gemini now threads through Search, Android, and its creative tools, including <a href="https://www.tomsguide.com/ai/google-gemini/how-to-use-google-flow-the-new-ai-video-generator-meant-for-filmmakers">Flow</a>. </p><p>Also on the agenda: <a href="https://www.tomsguide.com/computing/laptops/googlebooks-vs-chromebooks">Googlebooks,</a> the new Android-powered laptop category, with Acer, HP, Lenovo, and Dell all building hardware for a launch by the end of the year. </p></p>                </section><h2 id="the-part-i-m-most-excited-about">The part I'm most excited about </h2><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="JEfMgj8h9nsyU7prc2eMfd" name="Google I_O '25 Keynote 45-22 screenshot" alt="Google I/O 2025" src="https://cdn.mos.cms.futurecdn.net/JEfMgj8h9nsyU7prc2eMfd.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: Google)</span></figcaption></figure><p>Google I/O almost always saves <em>something.</em> Previous years have produced surprise model announcements, unexpected hardware, and significant pivots to core products like Search and Photos. </p><p>Last year the story turned out to be how deeply Gemini had been woven into everything. This year, the equivalent reveal could come from almost any direction.</p><p>Let’s not forget the live demo wildcard. Google’s on-stage tech previews have a rich history of going off-script, look no further than the Sabrina Carpenter Gemini hiccup at the Pixel 9 event. Yet, for every awkward glitch, just as many moments go according to plan. </p><p>Either way, they tend to be the watercooler moments people are still buzzing about the next morning. That alone is worth keeping a tab open for.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O9RaMX"></div>                            </div>                            <script src="https://kwizly.com/embed/O9RaMX.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/computing/search-engines/i-finally-figured-out-how-to-turn-off-googles-ai-overviews-and-search-is-actually-useful-again">Tired of Google's AI Overviews? Three easy workarounds to bring back traditional search</a></li><li><a href="https://www.tomsguide.com/computing/stop-letting-google-track-your-every-move-how-to-clear-your-search-history-in-2026">Stop letting Google track your every move — how to clear your search history in 2026</a></li><li><a href="https://www.tomsguide.com/computing/where-did-your-google-drive-storage-go-5-hidden-space-hogs-you-can-delete-now">Where did your Google Drive storage go? 5 hidden space-hogs you can delete now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget voicemail, Pixel phones have a handy AI feature that takes messages for you — here's how it works ]]></title>
                                                                                                <dc:content><![CDATA[ <p>There are plenty of features hiding beneath the surface of your phone, and chances are you didn't even know most of them existed. <a href="https://www.tomsguide.com/phones/android-phones/google-phones-in-2026-the-pixel-10a-pixel-11-and-more">Pixel phones</a> are some of the worst offenders for this, with Google continually adding features and updates to the phones and seemingly expecting users to figure everything out by themselves. </p><p>Take a Message is one such feature, nestled in the depths of the Pixel Phone app, and essentially operating as a more advanced version of voicemail. </p><p>Much like voicemail, callers will be given the chance to leave you a message, which your Pixel will record and transcribe. Take a Message is an AI-powered feature that does everything on your device, which means it's more private and not subject to the whim of a faceless phone company. Once active, the feature will trigger whenever you miss or decline a phone call. </p><p>The best part is that this is all done in real time, meaning you can pick up the phone at any point and take the call if it turns out that it's important. Plus, it isn't exclusive to the latest <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series phones and is available on Pixel devices as old as the <a href="https://www.tomsguide.com/reviews/google-pixel-6">Pixel 6</a> and <a href="https://www.tomsguide.com/reviews/google-pixel-watch-2">Pixel Watch 2</a>.</p><p>There are a couple of downsides, though. The first is that it's limited by location, and is currently only available in the U.S., U.K., Australia, Ireland and Canada — or in other words, the nations where English is most widely spoken. </p><p>It's also only available if you have a cell signal and your phone is switched on. If you're in a black spot or your phone is turned off, then your regular voicemail service will handle things.</p><p>Here's how to turn on Take a Message on your Pixel phone.</p><section class="howto-block">                    <h3>1. Open the Phone app's menu</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/LmuWNaYkPVJyVUbm3oZhqm.jpg"                                        alt="how to set up take a message on pixel phones"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/LmuWNaYkPVJyVUbm3oZhqm.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>First thing you need to do is open up your phone app, then tap the three-bar menu in the top right corner</p></p>                </section><section class="howto-block">                    <h3>2. Tap settings</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/KwdPDXV3JHAJ4vhaQXhzsm.jpg"                                        alt="how to set up take a message on pixel phones"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/KwdPDXV3JHAJ4vhaQXhzsm.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>This opens a list of four options, and you'll want to tap <strong>Settings</strong> to continue.</p></p>                </section><section class="howto-block">                    <h3>3. Turn on Take a Message</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/bLVqmWkY9wiUbGxqQKtPxm.jpg"                                        alt="how to set up take a message on pixel phones"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/bLVqmWkY9wiUbGxqQKtPxm.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Next up, you'll want to find <strong>Take a Message</strong> in the list of options. It's right at the bottom of the <strong>Call Assist</strong> section, and means you won't need to scroll down to find it. Tap it, then toggle the Take a Message feature on in the next menu.</p></p>                </section><section class="howto-block">                    <h3>4. Wait for your messages</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/5FAHtQ8bGvRKa5jChHzZxm.jpg"                                        alt="how to set up take a message on pixel phones"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/5FAHtQ8bGvRKa5jChHzZxm.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Once Take a Message is set up, it will interact almost exactly like a voicemail service. Callers will be informed that they can leave a message after the beep, and they simply leave the same voice message they always would.</p><p>On your end, you'll be able to see that someone is leaving a message as it happens, and once the message is complete, you'll receive a notification with a summary of the details. Tapping the notification or opening your phone app shows you who called, a transcription of the message and a recording for you playback. </p><p>Just remember that this message is stored in your call history, rather than the voicemail tab. That will remain empty unless someone actually leaves a message with you carrier's voicemail inbox.</p></p>                </section><p>There you have it. Take a Message is now switched on, and it means people no longer have to leave you voicemail messages the way they used to. Instead, it's all handled by an on-device AI that saves a recording of the call, transcribes the contents and gives you the option to listen or share that message to your heart's content.</p><p>Realistically, the functional difference between Take a Message and a visual voicemail service is minimal. If your carrier supports visual voicemail, and you have it set up already, you won't notice a whole lot of difference — and neither will the people calling you. </p><p>If visual voicemail has never been an option, then you're going to get all those benefits regardless of whether your carrier says you're allowed them or not.</p><p>This means that all Pixel owners get to enjoy a consistent voicemail experience, and one that keeps your messages a lot more secure than a normal voicemail inbox might. Hopefully, this feature expands to all Android phones in the future, or at the very least, those devices that don't offer their own take on Take a message already.</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/android-phones/two-day-battery-life-is-a-game-changer-honor-magic8-pros-silicon-carbon-battery-is-a-wake-up-call-for-samsung-and-apple">'Two-day battery life is a game changer': Honor Magic8 Pro's silicon-carbon battery is a wake-up call for Samsung and Apple</a></li><li><a href="https://www.tomsguide.com/phones/android-phones/google-is-bringing-airdrop-support-to-more-android-phones-here-are-all-the-devices-that-will-get-it-next">Google is bringing AirDrop support to more Android phones — here are all the devices that will get it next</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-just-tipped-for-july-22-launch-at-unpacked-and-it-could-be-joined-by-galaxy-glasses">Samsung Galaxy Z Fold 8 just tipped for July 22 launch at Unpacked — and it could be joined by Galaxy Glasses</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/forget-voicemail-pixel-phones-have-a-handy-ai-feature-that-takes-messages-for-you-heres-how-it-works</link>
                                                                            <description>
                            <![CDATA[ Pixel phone users don't need to rely on voicemail to receive messages — the Take a Message feature can handle that in a smarter and more secure way. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aKcti4CLyghZYCY6e5x9Qm</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QDzBjHRegArpD2NDJeTRSG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 15 May 2026 08:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/QDzBjHRegArpD2NDJeTRSG-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 10 in the hand.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 10 in the hand.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 10 in the hand.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QDzBjHRegArpD2NDJeTRSG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There are plenty of features hiding beneath the surface of your phone, and chances are you didn't even know most of them existed. <a href="https://www.tomsguide.com/phones/android-phones/google-phones-in-2026-the-pixel-10a-pixel-11-and-more">Pixel phones</a> are some of the worst offenders for this, with Google continually adding features and updates to the phones and seemingly expecting users to figure everything out by themselves. </p><p>Take a Message is one such feature, nestled in the depths of the Pixel Phone app, and essentially operating as a more advanced version of voicemail. </p><p>Much like voicemail, callers will be given the chance to leave you a message, which your Pixel will record and transcribe. Take a Message is an AI-powered feature that does everything on your device, which means it's more private and not subject to the whim of a faceless phone company. Once active, the feature will trigger whenever you miss or decline a phone call. </p><p>The best part is that this is all done in real time, meaning you can pick up the phone at any point and take the call if it turns out that it's important. Plus, it isn't exclusive to the latest <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series phones and is available on Pixel devices as old as the <a href="https://www.tomsguide.com/reviews/google-pixel-6">Pixel 6</a> and <a href="https://www.tomsguide.com/reviews/google-pixel-watch-2">Pixel Watch 2</a>.</p><p>There are a couple of downsides, though. The first is that it's limited by location, and is currently only available in the U.S., U.K., Australia, Ireland and Canada — or in other words, the nations where English is most widely spoken. </p><p>It's also only available if you have a cell signal and your phone is switched on. If you're in a black spot or your phone is turned off, then your regular voicemail service will handle things.</p><p>Here's how to turn on Take a Message on your Pixel phone.</p><section class="howto-block">                    <h3>1. Open the Phone app's menu</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/LmuWNaYkPVJyVUbm3oZhqm.jpg"                                        alt="how to set up take a message on pixel phones"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/LmuWNaYkPVJyVUbm3oZhqm.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>First thing you need to do is open up your phone app, then tap the three-bar menu in the top right corner</p></p>                </section><section class="howto-block">                    <h3>2. Tap settings</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/KwdPDXV3JHAJ4vhaQXhzsm.jpg"                                        alt="how to set up take a message on pixel phones"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/KwdPDXV3JHAJ4vhaQXhzsm.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>This opens a list of four options, and you'll want to tap <strong>Settings</strong> to continue.</p></p>                </section><section class="howto-block">                    <h3>3. Turn on Take a Message</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/bLVqmWkY9wiUbGxqQKtPxm.jpg"                                        alt="how to set up take a message on pixel phones"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/bLVqmWkY9wiUbGxqQKtPxm.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Next up, you'll want to find <strong>Take a Message</strong> in the list of options. It's right at the bottom of the <strong>Call Assist</strong> section, and means you won't need to scroll down to find it. Tap it, then toggle the Take a Message feature on in the next menu.</p></p>                </section><section class="howto-block">                    <h3>4. Wait for your messages</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/5FAHtQ8bGvRKa5jChHzZxm.jpg"                                        alt="how to set up take a message on pixel phones"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/5FAHtQ8bGvRKa5jChHzZxm.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Once Take a Message is set up, it will interact almost exactly like a voicemail service. Callers will be informed that they can leave a message after the beep, and they simply leave the same voice message they always would.</p><p>On your end, you'll be able to see that someone is leaving a message as it happens, and once the message is complete, you'll receive a notification with a summary of the details. Tapping the notification or opening your phone app shows you who called, a transcription of the message and a recording for you playback. </p><p>Just remember that this message is stored in your call history, rather than the voicemail tab. That will remain empty unless someone actually leaves a message with you carrier's voicemail inbox.</p></p>                </section><p>There you have it. Take a Message is now switched on, and it means people no longer have to leave you voicemail messages the way they used to. Instead, it's all handled by an on-device AI that saves a recording of the call, transcribes the contents and gives you the option to listen or share that message to your heart's content.</p><p>Realistically, the functional difference between Take a Message and a visual voicemail service is minimal. If your carrier supports visual voicemail, and you have it set up already, you won't notice a whole lot of difference — and neither will the people calling you. </p><p>If visual voicemail has never been an option, then you're going to get all those benefits regardless of whether your carrier says you're allowed them or not.</p><p>This means that all Pixel owners get to enjoy a consistent voicemail experience, and one that keeps your messages a lot more secure than a normal voicemail inbox might. Hopefully, this feature expands to all Android phones in the future, or at the very least, those devices that don't offer their own take on Take a message already.</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/android-phones/two-day-battery-life-is-a-game-changer-honor-magic8-pros-silicon-carbon-battery-is-a-wake-up-call-for-samsung-and-apple">'Two-day battery life is a game changer': Honor Magic8 Pro's silicon-carbon battery is a wake-up call for Samsung and Apple</a></li><li><a href="https://www.tomsguide.com/phones/android-phones/google-is-bringing-airdrop-support-to-more-android-phones-here-are-all-the-devices-that-will-get-it-next">Google is bringing AirDrop support to more Android phones — here are all the devices that will get it next</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-just-tipped-for-july-22-launch-at-unpacked-and-it-could-be-joined-by-galaxy-glasses">Samsung Galaxy Z Fold 8 just tipped for July 22 launch at Unpacked — and it could be joined by Galaxy Glasses</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Biggest Android Show Google I/O Edition announcements — Googlebook, Android 17, Gemini Intelligence, Android Auto, and more ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="live-content"><p><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-i-o-2025-date-event-details-ai-announcements-and-everything-else-you-need-to-know">Google I/O</a> may not be officially kicking off for another week, but Google is revealing some of the news early during a special Android-themed presentation. <a href="https://www.tomsguide.com/phones/android-phones/biggest-year-for-android-yet-android-show-i-o-edition-returns-in-may-and-heres-what-i-expect">The Android Show: I/O Edition</a> came and went, bringing along exciting news around Google's ecosystem — and introducing a totally new product category.</p><p>Most notably, it's stepping into the the premium laptop segment with the Googlebook, which the company says are "the first laptops designed from the ground up for Gemini Intelligence.” These aren't meant to replace its Chromebooks, but rather, lean on AI to better help you perform complex tasks. </p><p>Speaking of Gemini Intelligence, it's going to transform the Android experience in a number of ways. For example, you'll be able to create helpful widgets on your phone to meet your exact needs. It's also coming to Android Auto, where you can tap into its task automation feature to perform complex stuff by simply speaking them.</p><p>Finally, the Android Show: I/O Edition also reveals other key integrations with Instagram that will make content creation even better with Android phones. Here's all the biggest announcements from the Android Show: I/O Edition.</p><h2 id="how-to-watch-the-android-show-i-o-edition-2026">How to watch The Android Show: I/O Edition 2026</h2><p>Tuning into The Android Show is super easy, no matter where you are, or what devices you have to hand. The show itself was streamed on May 12 from 10 a.m. PT / 1 p.m. ET / 6 p.m. BST, and since it's a Google event, everything was live-streamed via YouTube.</p><p>We've embedded the story below, so you can watch the entire event right here and rewatch it. But if you'd prefer to watch it on YouTube itself, then be sure to click <a href="https://www.youtube.com/live/dXCCleAddEA" target="_blank">this link.</a></p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/-Gii_RXT91I" allowfullscreen></iframe></div></div><p>Going to YouTube will also give you the option to be notified when The Android Show is about to start. That way, you won't forget to tune in and miss those early announcements.</p><h2 id="android-show-i-o-edition-biggest-announcements">Android Show: I/O Edition: Biggest announcements</h2><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="Vz8t68ZfA9AmvBwCjLmLuh" name="The Android Show_ Developers Cut 5-53 screenshot" alt="Android Show Google I/O Edition at a glance" src="https://cdn.mos.cms.futurecdn.net/Vz8t68ZfA9AmvBwCjLmLuh.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>While the Android Show: I/O Edition gave us a look at what Google's working on, there's surely going to be even more in store for the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-i-o-2026-officially-kicks-off-in-may-heres-when-and-what-we-expect-to-see">Google I/O 2026</a> keynote next week. However, this event yielded several big surprises — so here's all the announcements.</p><ul><li><a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever"><strong>Gemini Intelligence</strong></a><strong>: </strong>This isn't just a rebrand or an app to access AI, it's becoming the intelligence layer running underneath Android itself.</li><li><a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know"><strong>Googlebook</strong></a><strong>: </strong>Google officially enters the premium laptop segment with its new Googlebook line, a high-end series of AI PCs built from the ground up centered around Gemini Intelligence.</li><li><a href="https://www.tomsguide.com/phones/android-auto-is-about-to-change-the-way-you-drive-3d-google-maps-redesigned-interface-video-support-gemini-and-more"><strong>Android Auto:</strong></a><strong> </strong>The car infotainment system is getting a much needed makeover with customizable widgets on the home screen, support for video playback, and more.</li><li><a href="https://www.tomsguide.com/phones/android-auto-is-about-to-change-the-way-you-drive-3d-google-maps-redesigned-interface-video-support-gemini-and-more"><strong>Immersive Navigation with Google Maps:</strong></a><strong> </strong>Not only is Google Maps for Android Auto going 3D, but its new Immersive Navigation can better instruct you with directions.</li></ul></div><div class="live-content"><h2 id="what-s-happening-with-android-17">What's happening with Android 17?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eCnerPCYSMKFXh3YbyUbjk" name="android-17-logo-on-pixel" alt="Android 17 logo on a Google Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/eCnerPCYSMKFXh3YbyUbjk.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>It wouldn't be the Android Show if Google's mobile operating system didn't make an appearance. But it's unclear what Google might actually have to announce, given how far along we already are in the <a href="https://www.tomsguide.com/phones/android-phones/android-17-changes-worth-paying-attention-to">Android 17</a> release cycle.</p><p>The first <a href="https://www.tomsguide.com/phones/android-phones/get-your-pixels-ready-android-17-beta-1-just-arrived-with-a-bunch-of-new-features">Android 17 beta</a> was released back in February, and the software has been in the "Platform Stability" phase since March. Entering this phase means that features are all locked in, and subsequent updates are focused on fixing bugs and other issues ahead of launch.</p><p>The wide availability of the Android 17 beta means people have already uncovered most of its secrets. So we probably shouldn't expect to hear about any new additions to Android 17 later today. Though this doesn't discount the possibility of Google announcing features that are exclusive to certain devices, such as Pixel phones or AI features that have been developed in collaboration with Samsung.</p></div><div class="live-content"><time datetime="2026-05-12T11:06:38+00:00">May 12, 2026 – 7:06 AM</time><h2 id="aluminum-os-could-be-on-the-cards">Aluminum OS could be on the cards</h2><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="rDsrtFrg3inDQVU5VHpSg4" name="shutterstock_1846454530 (3) chromebook.jpg" alt="Chromebook on a table" src="https://cdn.mos.cms.futurecdn.net/rDsrtFrg3inDQVU5VHpSg4.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>One thing that we should hopefully hear about during the Android Show is what's happening with Aluminum OS — the name given to the new OS that <a href="https://www.tomsguide.com/computing/operating-systems/googles-leaked-aluminum-os-might-be-the-chromeos-pro-ive-waited-years-for-is-it-finally-time-to-ditch-windows-11-for-good">aims to merge Android with ChromeOS. </a></p><p>We know that Google will be scrapping ChromeOS in its current form, in favor of bringing Android to Chromebooks and other desktop PCS, we just don't have any specifics on when this is going to happen. I/O and The Android Show is the perfect opportunity to clear the air and reveal when this is likely to happen.</p><p>Considering various Android phones now have a dedicated desktop mode, including Pixels, this should be happening sooner rather than later anyway.</p></div><div class="live-content"><time datetime="2026-05-12T11:10:33+00:00">May 12, 2026 – 7:10 AM</time><h2 id="what-s-left-for-google-i-o-itself">What's left for Google I/O itself?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1795px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="5PDREfw5qoyJ9rEdYQYhP8" name="Screenshot 2026-04-16 170321" alt="google i/o 2026" src="https://cdn.mos.cms.futurecdn.net/5PDREfw5qoyJ9rEdYQYhP8.png" mos="" align="middle" fullscreen="" width="1795" height="1010" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>With Android taking center stage in its own show, ahead of the Google I/O keynote next week, some of you may be wondering what Google will have left for its developer conference next week. If last year is anything to go by, I/O itself is going to focus very heavily on AI.</p><p>We're not just talking about Gemini, either. Google has been working on so many different AI models that do a bunch of different things that there will be no shortage of things to talk about. </p><p>In fact, pulling Android into its own show is likely being done because Google has so much AI stuff to talk about and there wouldn't be enough time to discuss the operating system otherwise.</p></div><div class="live-content"><time datetime="2026-05-12T11:17:33+00:00">May 12, 2026 – 7:17 AM</time><h2 id="android-isn-t-just-about-phones-or-laptops">Android isn't just about phones or laptops</h2><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="MJUwF8J4uhEfByW5nZH6QD" name="Galaxy XR-2" alt="Samsung Galaxy XR augmented reality headset" src="https://cdn.mos.cms.futurecdn.net/MJUwF8J4uhEfByW5nZH6QD.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>It is mind-boggling how far Android's reach is when you think about it. What started off as an operating system for phones (and later tablets) has now spread to countless different kinds of devices. There's even a version of Android that runs on cars, and lets you access apps and systems while you drive.</p><p>The Android Show could feature announcements for all these different versions of Android, whether we're talking smartwatches, cars, smart home systems or even mixed reality products like <a href="https://www.tomsguide.com/computing/augmented-reality/galaxy-xr-review">Samsung's Galaxy XR</a>.</p><p>If Google plays its cards right, The Android Show could be a very exciting event — on par with I/O itself.</p></div><div class="live-content"><time datetime="2026-05-12T11:26:37+00:00">May 12, 2026 – 7:26 AM</time><h2 id="this-won-t-be-an-ai-free-event">This won't be an AI-free event</h2><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="d6iRrNAQeYiESHsFCyjoUK" name="shutterstock_2604883871-2" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/d6iRrNAQeYiESHsFCyjoUK.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: Shutterstock)</span></figcaption></figure><p>Google has invested a lot in AI, and if you think it's going to save all of that news for the I/O keynote, then you're probably mistaken. Gemini, in particular, plays a huge role in the Android ecosystem, and any updates coming to the platform will likely feature something for Gemini to do as well.</p><p>That's especially true when you remember that the <a href="https://www.tomsguide.com/phones/android-phones/biggest-year-for-android-yet-android-show-i-o-edition-returns-in-may-and-heres-what-i-expect">Android Show teaser</a> features the normally-green Android mascot morphing into a color scheme reminiscent of the Gemini logo. </p><p>We can't really predict what kind of Gemini updates to expect, since some of the good stuff will be held back until next week. I expect that any Gemini news will be focused on new features and capabilities that Android users will be able to use on their devices pretty soon — while the general model updates and technical stuff will be among the talking points at I/O proper. </p></div><div class="live-content"><time datetime="2026-05-12T11:36:14+00:00">May 12, 2026 – 7:36 AM</time><h2 id="what-about-hardware">What about hardware?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5823px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="K5nXRpJ54kqKnNnoXW9rpG" name="Android XR Dec 2025-LIST" alt="Xreal for Project Aura Android XR glasses on a table stand" src="https://cdn.mos.cms.futurecdn.net/K5nXRpJ54kqKnNnoXW9rpG.jpg" mos="" align="middle" fullscreen="" width="5823" height="3275" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google/Xreal for Project Aura)</span></figcaption></figure><p>Google I/O is normally a very software-focused event, and the inclusion of physical hardware is usually kept to a minimum. That said, there have been some exceptions in the past, such as revealing the Pixel Tablet or teasing the Pixel 7 series phones a few months early.</p><p>The Android Show is a different story, and while this is only the second time Google has held this event, there's always the possibility that hardware could play a role going forward.</p><p>The question is, what sort of hardware could we see? It's unlikely that Pixel phones or watches will make much of an appearance, since they typically get their own launch event in the late summer or fall. </p><p>Likewise, any truly innovative devices, such as <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">AI glasses</a>, would likely need to be kept for events that have a strong developer presence, so that work can begin on creating the right apps and software.</p><p>But who knows, if Aluminum OS finally gets its own big reveal, Google may use it as an opportunity to reveal some new laptops. But whether they will be Google-made laptops, like the Pixelbook, or devices made by trusted partners, isn't something we can predict.</p></div><div class="live-content"><time datetime="2026-05-12T12:06:29+00:00">May 12, 2026 – 8:06 AM</time><h2 id="there-s-more-to-android-than-a-show">There's more to Android than a show</h2><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="hp6umEFCPajVFYorSSU3tS" name="ios 26.5.shutterstock_2693625949" alt="iOS 26 logo on iPhone sitting on a laptop keyboard" src="https://cdn.mos.cms.futurecdn.net/hp6umEFCPajVFYorSSU3tS.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Android Show isn't the only newsworthy event in the world of Android right now, and it's all thanks to<a href="https://www.apple.com/newsroom/2026/05/end-to-end-encrypted-rcs-messaging-begins-rolling-out-today-in-beta/" target="_blank"> Apple</a>.</p><p>The <a href="https://www.tomsguide.com/phones/iphones/ios-26-5-arrives-with-rcs-message-encryption-4-new-features-you-need-to-know">launch of iOS 26.5</a> means that iPhone and Android users can finally send encrypted messages to each other via RCS. That means messages you send to iPhone users will automatically be secured, without being forced to rely on third-party services like WhatsApp or Signal.</p><p>The caveat is that this feature is still in beta, and only applies to iPhone users with supported carriers sending messages to users with the latest version of Google Messages. The green chat bubble also isn't going away, so Android users will still stand out in all your group chats. Still, it sure as heck beats having to send unsecured messages via SMS, which is how things used to be.</p></div><div class="live-content"><time datetime="2026-05-12T12:37:10+00:00">May 12, 2026 – 8:37 AM</time><h2 id="gemini-for-home-got-a-pre-i-o-update">Gemini for Home got a pre-I/O update</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2032px;"><p class="vanilla-image-block" style="padding-top:57.48%;"><img id="qFporhqHp7V9TyjCFbikVM" name="Google Nest Hub Max.jpg" alt="Google Nest Hub Max" src="https://cdn.mos.cms.futurecdn.net/qFporhqHp7V9TyjCFbikVM.jpg" mos="" align="middle" fullscreen="" width="2032" height="1168" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google doesn't save all it's big announcements for flashy events like I/O and The Android Show. New updates do get released throughout the year, and <a href="https://support.google.com/googlenest/answer/15962877?visit_id=639105699230587677-1743494415&p=app_release_notes&rd=1#zippy=%2Capril%2Cmay" target="_blank">Gemini for Home</a> is the latest one to get some much-needed tweaks.</p><p>Notably, Gemini for Home will stop denying you access to information about alcoholic beverages when all you want is a recipe for some new cocktails. It turned out this was an issue with age-gating, and the controls used to prevent kids from asking about unsuitable topics. Now, all affected adults need to do is make sure parental controls are switched off, and they can ask for all the alcoholic information they like.</p><p>Other updates include speedier responses from the AI, and updating the "Ask Home" feature to accept voice commands. Meaning you can ask more conversational questions using a Nest Hub or similar device, rather than relying on the Google Home app.</p></div><div class="live-content"><time datetime="2026-05-12T13:05:45+00:00">May 12, 2026 – 9:05 AM</time><h2 id="gemini-omni-could-be-coming">Gemini Omni could be coming</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1036px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="jKeAjgfKfdWKDKKvKojg2V" name="Gemini" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/jKeAjgfKfdWKDKKvKojg2V.png" mos="" align="middle" fullscreen="" width="1036" height="583" 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>Google's video-generating AI models are incredibly impressive, and Veo 3 blew our socks off at I/O 2025. Recent leaks now suggest that a new model is on the way, dubbed <a href="https://9to5google.com/2026/05/11/gemini-omni-video-model-shows-up-with-some-early-demos/" target="_blank">Gemini Omni.</a></p><p>Not much is known about Gemini Omni right now. At least one user has been prompted to "Create with Gemini Omni," and metadata suggests that this is an extension of what Google has already accomplished with existing Veo models. </p><p>The user managed to create two AI videos with the prompt, including one of two men eating spaghetti at an upscale restaurant — a reference to the infamous Will Smith video from a fw years back. The other features a professor writing out mathematical proofs on a chalkboard, with impressive results.</p><p>We'll no doubt hear more about this at I/O next week, rather than today's Android Show, but rest assured that AI-generated video is apparently not going anywhere</p></div><div class="live-content"><time datetime="2026-05-12T13:34:11+00:00">May 12, 2026 – 9:34 AM</time><h2 id="we-need-to-hear-more-about-android-xr-glasses-and-soon">We need to hear more about Android XR glasses, and soon</h2><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="fKCbP28rsahvFprF9cuqWC" name="Android XR smart glasses-LIST2" alt="Android XR glasses" src="https://cdn.mos.cms.futurecdn.net/fKCbP28rsahvFprF9cuqWC.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>Smart glasses are everywhere right now, and Google has been promising its own development in that area for what feels like forever. We got to try a <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">demo model at the end of last year</a>, but we're hoping that there will be some kind of news about a more refined model at this year's event.</p><p>And since those glasses would almost certainly run on Android XR, there could be some information during The Android Show. Even if I/O is mainly a software-focused event.</p><p>In an ideal world, we'd be hearing about actual XR glasses we can go out and buy, and how much they'll end up costing us. Or, at the very least, a rough timeframe of when they might go on sale. Considering how much the smart glasses market is heating up, Google can't afford to keep waiting for much longer.</p></div><div class="live-content"><time datetime="2026-05-12T13:56:07+00:00">May 12, 2026 – 9:56 AM</time><h2 id="what-do-you-want-to-hear-about-during-the-android-show">What do you want to hear about during The Android Show?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WVqlJe"></div>                            </div>                            <script src="https://kwizly.com/embed/WVqlJe.js" async></script></div><div class="live-content"><time datetime="2026-05-12T14:33:15+00:00">May 12, 2026 – 10:33 AM</time><h2 id="will-we-hear-about-wear-os-7">Will we hear about Wear OS 7?</h2><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="yUK7WGbaQNpRSYJsSTQfG" name="Pixel-Watch-4-3" alt="Pixel Watch 4 on wrist showing time, weather and heart rate." src="https://cdn.mos.cms.futurecdn.net/yUK7WGbaQNpRSYJsSTQfG.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>A new version of Android means there should be a new version of Wear OS coming with it, but so far we haven't actually heard all that much about it. We assume that it will be called Wear OS 7, and will likely show up on the Pixel Watch 5 before spreading to other smartwatches, but that's it right now.</p><p>Seeing as how the Android Show is about all things Android, now would be the time for Google to start offering up the first few pieces of information about the upcoming update ù and potentially even give us an idea of what to expect from future smartwatches.</p></div><div class="live-content"><time datetime="2026-05-12T15:02:52+00:00">May 12, 2026 – 11:02 AM</time><h2 id="you-can-try-android-17-right-now-in-beta">You can try Android 17 right now (in beta)</h2><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.20%;"><img id="3kWod5vfFi35otShydB6i6" name="Android-17-on-Pixel-9-Pro-XL--LEDE9" alt="Android 17 badge superimposed on a Google Pixel phone" src="https://cdn.mos.cms.futurecdn.net/3kWod5vfFi35otShydB6i6.jpg" mos="" align="middle" fullscreen="" width="2000" height="1124" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>While Android 17 probably won't arrive until late summer, you can take the software for a test drive right now. All you have to do is sign up for the Android 17 beta, and the best part is you don't need a Pixel phone to try it out.</p><p>Various phone makers have opted in for the Android 17 beta in recent weeks. That includes Samsung, has confirmed it will release the Android 17-based One UI 9 beta at some point later this week.</p><p>Here are the phones you can use to sign up for Android 17 beta right now:</p><ul><li>Google Pixel 6 and newer</li><li>Samsung Galaxy S23 and newer</li><li>Samsung Galaxy Z Flip 6, Z Fold 6 and newer</li><li>Galaxy A35, A36, A37, A55, A56 and A57</li><li>Xiaomi 17, 17 Ultra, 15T Pro</li><li>OnePlus 14, 15, Open, Nord 5</li><li>Oppo Find X9 Pro</li><li>Realme GT 8 Pro</li><li>Motorola Edge 70 series, Edge 60 series, G86 series and G57 series</li><li>Motorola Razr Plus 2025 and Razr Plus 2024</li></ul></div><div class="live-content"><time datetime="2026-05-12T15:32:46+00:00">May 12, 2026 – 11:32 AM</time><h2 id="don-t-expect-pixel-11-news-tonight-or-next-week">Don't expect Pixel 11 news tonight — or next week</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1154px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="XT3UDi3a4UHzdbWs5SN5P3" name="Pixel 11 render" alt="Pixel 11 render" src="https://cdn.mos.cms.futurecdn.net/XT3UDi3a4UHzdbWs5SN5P3.jpg" mos="" align="middle" fullscreen="" width="1154" height="649" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks / Android Headlines)</span></figcaption></figure><p>There's been a lot of chatter about the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series in recent weeks, but if there's one thing you shouldn't expect to see during the Android Show (or even at Google I/O proper), it's Google's next smartphone. </p><p>I/O is a very developer-focussed event, with emphasis on software and all the advances that have been made in that area over the past 12 months. Upcoming hardware is pretty inconsequential to all that, and it means Google is unlikely to have anything to say about the Pixel 11 — or other unannounced smart devices. So be sure to temper your expectations before you tune in.</p></div><div class="live-content"><time datetime="2026-05-12T15:59:05+00:00">May 12, 2026 – 11:59 AM</time><h2 id="will-android-xr-make-an-appearance">Will Android XR make an appearance?</h2><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="FqEdAbuhNkFUa2rDMxcEBe" name="Android XR" alt="Android XR text with pictures of people around it" src="https://cdn.mos.cms.futurecdn.net/FqEdAbuhNkFUa2rDMxcEBe.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: <a href="https://blog.google/products/android/android-xr/">Google</a>)</span></figcaption></figure><p>We know Android XR will have a presence at Google I/O next week but it's not clear if Google's take on VR will get a mention during the Android Show today.</p><p>It's felt pretty quiet since the <a href="https://www.tomsguide.com/computing/augmented-reality/galaxy-xr-review">Galaxy XR headset</a> launched last October. Though with Apple reportedly <a href="https://www.tomsguide.com/computing/vr-ar/apple-has-reportedly-stopped-work-on-the-vision-pro-heres-what-we-know">dropping the Vision Pro</a>, perhaps headsets have become less of a priority.<br><br>We're also still waiting for more information on the <a href="https://www.tomsguide.com/computing/smart-glasses/xreals-project-aura-reveals-the-exciting-true-intentions-for-android-xr-but-will-anyone-actually-wear-them">Xreal Project Aura</a> display glasses. Plus, Google has been <a href="https://www.tomsguide.com/computing/smart-glasses/googles-new-android-xr-smart-glasses-use-gemini-to-ai-edit-your-world-while-youre-still-taking-the-photo">teasing AI smart glasses</a> since at least 2024. </p></div><div class="live-content"><time datetime="2026-05-12T16:30:26+00:00">May 12, 2026 – 12:30 PM</time><h2 id="30-minutes-to-showtime">30 minutes to showtime</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2096px;"><p class="vanilla-image-block" style="padding-top:56.39%;"><img id="CtjG22X4bXym6hZHmk28nn" name="android-17-updates-io-26-3" alt="New features that Google has introduced with Android 17" src="https://cdn.mos.cms.futurecdn.net/CtjG22X4bXym6hZHmk28nn.jpg" mos="" align="middle" fullscreen="" width="2096" height="1182" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Reminder, the Android Show kicks off at 10 a.m. PT / 1 p.m. ET / 6 p.m. BST; 30 minutes from now. </p><p>Of course, you can you follow along via the <a href="https://www.youtube.com/watch?v=-Gii_RXT91I" target="_blank">Google YouTube channel</a>.</p></div><div class="live-content"><time datetime="2026-05-12T16:46:36+00:00">May 12, 2026 – 12:46 PM</time><h2 id="the-arrival-of-android-os">The arrival of Android OS</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2128px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="YusrnjfVEraewF8AstbABg" name="chrome os lifestyle.jpg" alt="A person working on a Google Sheet in their browser on a Chromebook" src="https://cdn.mos.cms.futurecdn.net/YusrnjfVEraewF8AstbABg.jpg" mos="" align="middle" fullscreen="" width="2128" height="1198" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>It's weird with the Android Show because it's not clear how much Google will save for I/O versus this extra program.</p><p>So, with that in mind, will the rumored Android/Chrome OS, Aluminum, make an appearance?</p><p>The new OS is supposed to combine Chrome OS and Android mobile together. <a href="https://www.tomsguide.com/computing/chromebooks/googles-combining-chrome-os-and-android-and-its-the-smartest-move-its-made-in-years">Google confirmed the merger</a> was happening last summer but has remained quiet since then.</p></div><div class="live-content"><time datetime="2026-05-12T17:04:58+00:00">May 12, 2026 – 1:04 PM</time><h2 id="android-show-i-o-edition-kicks-off-with-a-brand-new-category">Android Show I/O Edition kicks off with a brand new category</h2><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="hMB2KWdEwYN8GwfrTFQkuQ" name="🎬 Watch The Android Show _ I_O Edition 2026 5-47 screenshot" alt="Android head at Android Show I/O Edition" src="https://cdn.mos.cms.futurecdn.net/hMB2KWdEwYN8GwfrTFQkuQ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Android Show I/O Edition kicks off teasing Gemini, Android Auto, and more, but you'll want to stick around for the end with Google introducing a brand new category.</p></div><div class="live-content"><time datetime="2026-05-12T17:08:32+00:00">May 12, 2026 – 1:08 PM</time><h2 id="google-just-revealed-gemini-intelligence">Google just revealed Gemini Intelligence</h2><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="o74mitjGMdgLu6WXJK7N6n" name="🎬 Watch The Android Show _ I_O Edition 2026 9-11 screenshot" alt="Gemini Intelligence" src="https://cdn.mos.cms.futurecdn.net/o74mitjGMdgLu6WXJK7N6n.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's making a major rebrand to its efforts around AI, as the company formally introduced <a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever">Gemini Intelligence</a>. Gemini has been a central part of its product strategy, from Search and Gmail to Chrome and Android devices. However, Gemini Intelligence changes the framing by getting more done across different places.</p></div><div class="live-content"><time datetime="2026-05-12T17:10:37+00:00">May 12, 2026 – 1:10 PM</time><h2 id="chrome-gets-automation-feature-courtesy-of-gemini-intelligence">Chrome gets automation feature courtesy of Gemini Intelligence</h2><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="6AAMqrZ3r8foVGrGo7nrGE" name="🎬 Watch The Android Show _ I_O Edition 2026 11-14 screenshot" alt="Gemini on the web via Chrome" src="https://cdn.mos.cms.futurecdn.net/6AAMqrZ3r8foVGrGo7nrGE.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google is bringing Gemini deeper into Chrome, by doing stuff like summarizing articles, answer questions about web pages and help with tasks such as booking travel. For example, Gemini Intelligence can quickly fill out forms with details by using the information it knows on your phone.</p></div><div class="live-content"><time datetime="2026-05-12T17:12:51+00:00">May 12, 2026 – 1:12 PM</time><h2 id="gboard-gets-smarter-with-rambler">Gboard gets smarter with Rambler</h2><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="ohPceUsbTYpkEHShbNZMSY" name="🎬 Watch The Android Show _ I_O Edition 2026 14-7 screenshot" alt="Rambler on Android" src="https://cdn.mos.cms.futurecdn.net/ohPceUsbTYpkEHShbNZMSY.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>You won't have to enunciate your words as much when you're using Gboard's new Rambler feature because it can understand your voice, even when you mess up or want to say something else. It's really fascinating how well it can also understand accents with accuracy, so you can rely on this voice dictation rather than physically type it yourself.</p></div><div class="live-content"><time datetime="2026-05-12T17:15:36+00:00">May 12, 2026 – 1:15 PM</time><h2 id="build-your-own-widget-using-gemini-intelligence">Build your own widget using Gemini Intelligence</h2><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="MYyHLDFGcTA3UnXUFbdq7m" name="🎬 Watch The Android Show _ I_O Edition 2026 16-2 screenshot" alt="Create your own widgets using Gemini" src="https://cdn.mos.cms.futurecdn.net/MYyHLDFGcTA3UnXUFbdq7m.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Who says you need to be an Android developer to create widgets? You'll now be able to create your own widget across different devices with ease with the help of Gemini Intelligence. Best of all, you can tailor it to what you need exactly.</p></div><div class="live-content"><time datetime="2026-05-12T17:23:11+00:00">May 12, 2026 – 1:23 PM</time><h2 id="instagram-is-getting-major-upgrades-but-there-s-a-catch">Instagram is getting major upgrades, but there's a catch</h2><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="ZhdYDnHBbDsYrjDF5vY3mJ" name="🎬 Watch The Android Show _ I_O Edition 2026 19-8 screenshot" alt="Instant Reactions on Android" src="https://cdn.mos.cms.futurecdn.net/ZhdYDnHBbDsYrjDF5vY3mJ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google is transforming Android 17 into a creative powerhouse by introducing Screen Reactions, a native tool that allows users to record their screen and themselves simultaneously for seamless reaction videos. Plus, anew partnership with Meta brings Ultra HDR support and Night Sight integration to Instagram. However, the camera centric tools appear to be reserved for Pixels.</p></div><div class="live-content"><time datetime="2026-05-12T17:25:11+00:00">May 12, 2026 – 1:25 PM</time><h2 id="emojis-go-3d-with-android-17">Emojis go 3D with Android 17</h2><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="PAWPwmXqPs5JFHtQCaHSKd" name="🎬 Watch The Android Show _ I_O Edition 2026 22-3 screenshot" alt="Upgraded Android emojis" src="https://cdn.mos.cms.futurecdn.net/PAWPwmXqPs5JFHtQCaHSKd.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google is finally addressing a long-standing Android weak point by introducing redesigned 3D emojis that offer a more expressive, physical feel similar to those on the iPhone. These updated characters will begin rolling out later this year, with Pixel devices being the first to receive the new look.</p></div><div class="live-content"><time datetime="2026-05-12T17:26:54+00:00">May 12, 2026 – 1:26 PM</time><h2 id="android-auto-gets-a-massive-makeover">Android Auto gets a massive makeover</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/WfzX4YHa2RFigMoLPgKidQ.png" alt="Android Auto on Mini Cooper" /><figcaption><small role="credit">Google</small></figcaption></figure></figure><p>Drivers using <a href="https://www.tomsguide.com/phones/android-auto-is-about-to-change-the-way-you-drive-3d-google-maps-redesigned-interface-video-support-gemini-and-more">Android Auto</a> are about to get a totally revamped experience that are now better optimized for different screens, a more immersive navigation with 3D Google Maps, video playback support, and much more.</p></div><div class="live-content"><time datetime="2026-05-12T17:28:41+00:00">May 12, 2026 – 1:28 PM</time><h2 id="gemini-intelligence-comes-to-android-auto">Gemini Intelligence comes to Android Auto</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Jn9D2iRZhm5VNbqoGhabgN" name="Android Auto -- Magic Cue.GIF" alt="Android Auto Magic Cue." src="https://cdn.mos.cms.futurecdn.net/Jn9D2iRZhm5VNbqoGhabgN.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Gemini Intelligence will help you driver better and safer with Android Auto because you'll be able to lean on the AI chatbot to perform complex tasks, like ordering food at a restaurant, by simply speaking it.</p></div><div class="live-content"><time datetime="2026-05-12T17:30:20+00:00">May 12, 2026 – 1:30 PM</time><h2 id="cars-with-google-built-in-gets-more-accurate-lane-guidance">Cars with Google built-in gets more accurate lane guidance</h2><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="Jg6QHbfv43TYDPVdU2Kznj" name="🎬 Watch The Android Show _ I_O Edition 2026 27-54 screenshot" alt="Immersive Navigation in Android Auto" src="https://cdn.mos.cms.futurecdn.net/Jg6QHbfv43TYDPVdU2Kznj.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Cars with Google built-in will have a better Google Maps experience that can use the vehicle's camera to know which lane you're in and tell you explicitly which lane to get into for your exit.</p></div><div class="live-content"><time datetime="2026-05-12T17:32:03+00:00">May 12, 2026 – 1:32 PM</time><h2 id="watch-videos-through-android-auto">Watch videos through Android Auto</h2><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="up76bDMGoomb8GqxqapYs4" name="🎬 Watch The Android Show _ I_O Edition 2026 28-36 screenshot" alt="Videos on Android Auto" src="https://cdn.mos.cms.futurecdn.net/up76bDMGoomb8GqxqapYs4.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Paris Hilton was tapped to talk about the new video playback support with Android Auto, which is a long time coming. Not only will you be able to play videos on YouTube, but it'll transition to an audio-only format when you start driving.</p></div><div class="live-content"><time datetime="2026-05-12T17:35:30+00:00">May 12, 2026 – 1:35 PM</time><h2 id="google-announces-a-new-product-category-googlebook-laptops">Google announces a new product category: Googlebook laptops</h2><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="XYUsKK8wgc7tS5bTwbLRFV" name="🎬 Watch The Android Show _ I_O Edition 2026 34-28 screenshot" alt="Googlebook reveal" src="https://cdn.mos.cms.futurecdn.net/XYUsKK8wgc7tS5bTwbLRFV.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>It's not meant to replace its Chromebooks, but Google saved the end of its event to talk a bit about its new product category: <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebook laptops. </a></p><p>Google is challenging the MacBook’s dominance with the launch of Googlebook, a new category of premium, Android-powered laptops built specifically for Gemini Intelligence. These high-end computing devices feature deep AI integration, such as a Magic Pointer for contextual tasks, and a seamless ecosystem that runs Android apps natively.</p></div><div class="live-content"><time datetime="2026-05-12T17:37:32+00:00">May 12, 2026 – 1:37 PM</time><h2 id="key-partners-tapped-to-create-googlebook-laptops">Key partners tapped to create Googlebook laptops</h2><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="Qtf6o6dchZpUotV8nDCMBC" name="🎬 Watch The Android Show _ I_O Edition 2026 38-38 screenshot" alt="Googlebar on Googlebook" src="https://cdn.mos.cms.futurecdn.net/Qtf6o6dchZpUotV8nDCMBC.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Major partners like Acer, ASUS, and Dell are set to produce these sleek devices, which include a signature glowing Glowbar on the keyboard to distinguish these Googlebooks from other laptops.</p></div><div class="live-content"><time datetime="2026-05-12T17:40:35+00:00">May 12, 2026 – 1:40 PM</time><h2 id="stay-tuned-for-more-at-google-i-o-2026">Stay tuned for more at Google I/O 2026</h2><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="TRW83J7V83tKpr78gjhFaS" name="🎬 Watch The Android Show _ I_O Edition 2026 41-5 screenshot" alt="Android Show I/O Edition That's a Wrap" src="https://cdn.mos.cms.futurecdn.net/TRW83J7V83tKpr78gjhFaS.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>And that's a wrap! There's a special developers cut of the Android Show that'll be running shortly, but there's still going to be way more new things introduced at Google I/O 2026.</p></div><div class="live-content"><time datetime="2026-05-12T17:59:46+00:00">May 12, 2026 – 1:59 PM</time><h2 id="gemini-intelligence-redefines-android-experience">Gemini Intelligence redefines Android experience</h2><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="jHXvNikHWRA6anVLpDjuU5" name="🎬 Watch The Android Show _ I_O Edition 2026 17-3 screenshot" alt="Gemini Intelligence" src="https://cdn.mos.cms.futurecdn.net/jHXvNikHWRA6anVLpDjuU5.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google just gave us a <a href="https://www.tomsguide.com/phones/android-phones/android-17-io-2026-upgrades">massive preview of the future</a> at the Android Show, headlined by the debut of Gemini Intelligence for deeper app automation. Beyond the AI, users can look forward to a complete visual overhaul with 3D emojis and enhanced cross-platform compatibility that makes Android and iPhone communication smoother than ever. From revolutionary multitasking tools to smarter system-wide integration, Android 17 is shaping up to be the most ambitious update in years.</p></div><div class="live-content"><time datetime="2026-05-12T18:17:37+00:00">May 12, 2026 – 2:17 PM</time><h2 id="gemini-intelligence-isn-t-a-feature-it-s-a-system-deeply-integrated-into-its-platforms">Gemini Intelligence isn't a feature, it's a system deeply integrated into its platforms</h2><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="6AAMqrZ3r8foVGrGo7nrGE" name="🎬 Watch The Android Show _ I_O Edition 2026 11-14 screenshot" alt="Gemini on the web via Chrome" src="https://cdn.mos.cms.futurecdn.net/6AAMqrZ3r8foVGrGo7nrGE.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google isn't just making <a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever">Gemini Intelligence </a>a feature that devices running Android can tap into, but rather, it's a totally new system that will be a fundamental pillar across everything.  One of the best examples of this is how it's being used in Chrome to perform tasks that normally would take time.</p><p>The best example is filling out a form on Chrome about your travel arrangements, like the details of your passport. Rather than waste the time looking back and forth between a snapshot you've captured with your camera, Gemini Intelligence can search all the information it finds and populates the details into the form for you.</p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/live/the-android-show-google-i-o-edition-live-all-the-latest-android-gemini-ai-and-android-xr-news-as-it-happens</link>
                                                                            <description>
                            <![CDATA[ Google I/O may not be for another week, but The Android Show: I/O Edition spilled the beans on the biggest news and updates for all things Android. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">SmQJf7qNM2Z3jCC5sVME2W</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/krhASg2wmDkirgfQdiDSwE-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Tue, 12 May 2026 11:00:07 +0000</pubDate>                                                                                                                                <updated>Tue, 12 May 2026 18:44:41 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/png" url="https://cdn.mos.cms.futurecdn.net/krhASg2wmDkirgfQdiDSwE-1280-80.png">
                                                            <media:credit><![CDATA[Google]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[the android show 2026 featuring the Android mascot in gemini-inspired colors]]></media:description>                                                            <media:text><![CDATA[the android show 2026 featuring the Android mascot in gemini-inspired colors]]></media:text>
                                <media:title type="plain"><![CDATA[the android show 2026 featuring the Android mascot in gemini-inspired colors]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/krhASg2wmDkirgfQdiDSwE-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="live-content"><p><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-i-o-2025-date-event-details-ai-announcements-and-everything-else-you-need-to-know">Google I/O</a> may not be officially kicking off for another week, but Google is revealing some of the news early during a special Android-themed presentation. <a href="https://www.tomsguide.com/phones/android-phones/biggest-year-for-android-yet-android-show-i-o-edition-returns-in-may-and-heres-what-i-expect">The Android Show: I/O Edition</a> came and went, bringing along exciting news around Google's ecosystem — and introducing a totally new product category.</p><p>Most notably, it's stepping into the the premium laptop segment with the Googlebook, which the company says are "the first laptops designed from the ground up for Gemini Intelligence.” These aren't meant to replace its Chromebooks, but rather, lean on AI to better help you perform complex tasks. </p><p>Speaking of Gemini Intelligence, it's going to transform the Android experience in a number of ways. For example, you'll be able to create helpful widgets on your phone to meet your exact needs. It's also coming to Android Auto, where you can tap into its task automation feature to perform complex stuff by simply speaking them.</p><p>Finally, the Android Show: I/O Edition also reveals other key integrations with Instagram that will make content creation even better with Android phones. Here's all the biggest announcements from the Android Show: I/O Edition.</p><h2 id="how-to-watch-the-android-show-i-o-edition-2026">How to watch The Android Show: I/O Edition 2026</h2><p>Tuning into The Android Show is super easy, no matter where you are, or what devices you have to hand. The show itself was streamed on May 12 from 10 a.m. PT / 1 p.m. ET / 6 p.m. BST, and since it's a Google event, everything was live-streamed via YouTube.</p><p>We've embedded the story below, so you can watch the entire event right here and rewatch it. But if you'd prefer to watch it on YouTube itself, then be sure to click <a href="https://www.youtube.com/live/dXCCleAddEA" target="_blank">this link.</a></p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/-Gii_RXT91I" allowfullscreen></iframe></div></div><p>Going to YouTube will also give you the option to be notified when The Android Show is about to start. That way, you won't forget to tune in and miss those early announcements.</p><h2 id="android-show-i-o-edition-biggest-announcements">Android Show: I/O Edition: Biggest announcements</h2><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="Vz8t68ZfA9AmvBwCjLmLuh" name="The Android Show_ Developers Cut 5-53 screenshot" alt="Android Show Google I/O Edition at a glance" src="https://cdn.mos.cms.futurecdn.net/Vz8t68ZfA9AmvBwCjLmLuh.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>While the Android Show: I/O Edition gave us a look at what Google's working on, there's surely going to be even more in store for the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-i-o-2026-officially-kicks-off-in-may-heres-when-and-what-we-expect-to-see">Google I/O 2026</a> keynote next week. However, this event yielded several big surprises — so here's all the announcements.</p><ul><li><a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever"><strong>Gemini Intelligence</strong></a><strong>: </strong>This isn't just a rebrand or an app to access AI, it's becoming the intelligence layer running underneath Android itself.</li><li><a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know"><strong>Googlebook</strong></a><strong>: </strong>Google officially enters the premium laptop segment with its new Googlebook line, a high-end series of AI PCs built from the ground up centered around Gemini Intelligence.</li><li><a href="https://www.tomsguide.com/phones/android-auto-is-about-to-change-the-way-you-drive-3d-google-maps-redesigned-interface-video-support-gemini-and-more"><strong>Android Auto:</strong></a><strong> </strong>The car infotainment system is getting a much needed makeover with customizable widgets on the home screen, support for video playback, and more.</li><li><a href="https://www.tomsguide.com/phones/android-auto-is-about-to-change-the-way-you-drive-3d-google-maps-redesigned-interface-video-support-gemini-and-more"><strong>Immersive Navigation with Google Maps:</strong></a><strong> </strong>Not only is Google Maps for Android Auto going 3D, but its new Immersive Navigation can better instruct you with directions.</li></ul></div><div class="live-content"><h2 id="what-s-happening-with-android-17">What's happening with Android 17?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eCnerPCYSMKFXh3YbyUbjk" name="android-17-logo-on-pixel" alt="Android 17 logo on a Google Pixel 9 Pro" src="https://cdn.mos.cms.futurecdn.net/eCnerPCYSMKFXh3YbyUbjk.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>It wouldn't be the Android Show if Google's mobile operating system didn't make an appearance. But it's unclear what Google might actually have to announce, given how far along we already are in the <a href="https://www.tomsguide.com/phones/android-phones/android-17-changes-worth-paying-attention-to">Android 17</a> release cycle.</p><p>The first <a href="https://www.tomsguide.com/phones/android-phones/get-your-pixels-ready-android-17-beta-1-just-arrived-with-a-bunch-of-new-features">Android 17 beta</a> was released back in February, and the software has been in the "Platform Stability" phase since March. Entering this phase means that features are all locked in, and subsequent updates are focused on fixing bugs and other issues ahead of launch.</p><p>The wide availability of the Android 17 beta means people have already uncovered most of its secrets. So we probably shouldn't expect to hear about any new additions to Android 17 later today. Though this doesn't discount the possibility of Google announcing features that are exclusive to certain devices, such as Pixel phones or AI features that have been developed in collaboration with Samsung.</p></div><div class="live-content"><time datetime="2026-05-12T11:06:38+00:00">May 12, 2026 – 7:06 AM</time><h2 id="aluminum-os-could-be-on-the-cards">Aluminum OS could be on the cards</h2><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="rDsrtFrg3inDQVU5VHpSg4" name="shutterstock_1846454530 (3) chromebook.jpg" alt="Chromebook on a table" src="https://cdn.mos.cms.futurecdn.net/rDsrtFrg3inDQVU5VHpSg4.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>One thing that we should hopefully hear about during the Android Show is what's happening with Aluminum OS — the name given to the new OS that <a href="https://www.tomsguide.com/computing/operating-systems/googles-leaked-aluminum-os-might-be-the-chromeos-pro-ive-waited-years-for-is-it-finally-time-to-ditch-windows-11-for-good">aims to merge Android with ChromeOS. </a></p><p>We know that Google will be scrapping ChromeOS in its current form, in favor of bringing Android to Chromebooks and other desktop PCS, we just don't have any specifics on when this is going to happen. I/O and The Android Show is the perfect opportunity to clear the air and reveal when this is likely to happen.</p><p>Considering various Android phones now have a dedicated desktop mode, including Pixels, this should be happening sooner rather than later anyway.</p></div><div class="live-content"><time datetime="2026-05-12T11:10:33+00:00">May 12, 2026 – 7:10 AM</time><h2 id="what-s-left-for-google-i-o-itself">What's left for Google I/O itself?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1795px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="5PDREfw5qoyJ9rEdYQYhP8" name="Screenshot 2026-04-16 170321" alt="google i/o 2026" src="https://cdn.mos.cms.futurecdn.net/5PDREfw5qoyJ9rEdYQYhP8.png" mos="" align="middle" fullscreen="" width="1795" height="1010" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>With Android taking center stage in its own show, ahead of the Google I/O keynote next week, some of you may be wondering what Google will have left for its developer conference next week. If last year is anything to go by, I/O itself is going to focus very heavily on AI.</p><p>We're not just talking about Gemini, either. Google has been working on so many different AI models that do a bunch of different things that there will be no shortage of things to talk about. </p><p>In fact, pulling Android into its own show is likely being done because Google has so much AI stuff to talk about and there wouldn't be enough time to discuss the operating system otherwise.</p></div><div class="live-content"><time datetime="2026-05-12T11:17:33+00:00">May 12, 2026 – 7:17 AM</time><h2 id="android-isn-t-just-about-phones-or-laptops">Android isn't just about phones or laptops</h2><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="MJUwF8J4uhEfByW5nZH6QD" name="Galaxy XR-2" alt="Samsung Galaxy XR augmented reality headset" src="https://cdn.mos.cms.futurecdn.net/MJUwF8J4uhEfByW5nZH6QD.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>It is mind-boggling how far Android's reach is when you think about it. What started off as an operating system for phones (and later tablets) has now spread to countless different kinds of devices. There's even a version of Android that runs on cars, and lets you access apps and systems while you drive.</p><p>The Android Show could feature announcements for all these different versions of Android, whether we're talking smartwatches, cars, smart home systems or even mixed reality products like <a href="https://www.tomsguide.com/computing/augmented-reality/galaxy-xr-review">Samsung's Galaxy XR</a>.</p><p>If Google plays its cards right, The Android Show could be a very exciting event — on par with I/O itself.</p></div><div class="live-content"><time datetime="2026-05-12T11:26:37+00:00">May 12, 2026 – 7:26 AM</time><h2 id="this-won-t-be-an-ai-free-event">This won't be an AI-free event</h2><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="d6iRrNAQeYiESHsFCyjoUK" name="shutterstock_2604883871-2" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/d6iRrNAQeYiESHsFCyjoUK.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: Shutterstock)</span></figcaption></figure><p>Google has invested a lot in AI, and if you think it's going to save all of that news for the I/O keynote, then you're probably mistaken. Gemini, in particular, plays a huge role in the Android ecosystem, and any updates coming to the platform will likely feature something for Gemini to do as well.</p><p>That's especially true when you remember that the <a href="https://www.tomsguide.com/phones/android-phones/biggest-year-for-android-yet-android-show-i-o-edition-returns-in-may-and-heres-what-i-expect">Android Show teaser</a> features the normally-green Android mascot morphing into a color scheme reminiscent of the Gemini logo. </p><p>We can't really predict what kind of Gemini updates to expect, since some of the good stuff will be held back until next week. I expect that any Gemini news will be focused on new features and capabilities that Android users will be able to use on their devices pretty soon — while the general model updates and technical stuff will be among the talking points at I/O proper. </p></div><div class="live-content"><time datetime="2026-05-12T11:36:14+00:00">May 12, 2026 – 7:36 AM</time><h2 id="what-about-hardware">What about hardware?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5823px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="K5nXRpJ54kqKnNnoXW9rpG" name="Android XR Dec 2025-LIST" alt="Xreal for Project Aura Android XR glasses on a table stand" src="https://cdn.mos.cms.futurecdn.net/K5nXRpJ54kqKnNnoXW9rpG.jpg" mos="" align="middle" fullscreen="" width="5823" height="3275" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google/Xreal for Project Aura)</span></figcaption></figure><p>Google I/O is normally a very software-focused event, and the inclusion of physical hardware is usually kept to a minimum. That said, there have been some exceptions in the past, such as revealing the Pixel Tablet or teasing the Pixel 7 series phones a few months early.</p><p>The Android Show is a different story, and while this is only the second time Google has held this event, there's always the possibility that hardware could play a role going forward.</p><p>The question is, what sort of hardware could we see? It's unlikely that Pixel phones or watches will make much of an appearance, since they typically get their own launch event in the late summer or fall. </p><p>Likewise, any truly innovative devices, such as <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">AI glasses</a>, would likely need to be kept for events that have a strong developer presence, so that work can begin on creating the right apps and software.</p><p>But who knows, if Aluminum OS finally gets its own big reveal, Google may use it as an opportunity to reveal some new laptops. But whether they will be Google-made laptops, like the Pixelbook, or devices made by trusted partners, isn't something we can predict.</p></div><div class="live-content"><time datetime="2026-05-12T12:06:29+00:00">May 12, 2026 – 8:06 AM</time><h2 id="there-s-more-to-android-than-a-show">There's more to Android than a show</h2><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="hp6umEFCPajVFYorSSU3tS" name="ios 26.5.shutterstock_2693625949" alt="iOS 26 logo on iPhone sitting on a laptop keyboard" src="https://cdn.mos.cms.futurecdn.net/hp6umEFCPajVFYorSSU3tS.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Android Show isn't the only newsworthy event in the world of Android right now, and it's all thanks to<a href="https://www.apple.com/newsroom/2026/05/end-to-end-encrypted-rcs-messaging-begins-rolling-out-today-in-beta/" target="_blank"> Apple</a>.</p><p>The <a href="https://www.tomsguide.com/phones/iphones/ios-26-5-arrives-with-rcs-message-encryption-4-new-features-you-need-to-know">launch of iOS 26.5</a> means that iPhone and Android users can finally send encrypted messages to each other via RCS. That means messages you send to iPhone users will automatically be secured, without being forced to rely on third-party services like WhatsApp or Signal.</p><p>The caveat is that this feature is still in beta, and only applies to iPhone users with supported carriers sending messages to users with the latest version of Google Messages. The green chat bubble also isn't going away, so Android users will still stand out in all your group chats. Still, it sure as heck beats having to send unsecured messages via SMS, which is how things used to be.</p></div><div class="live-content"><time datetime="2026-05-12T12:37:10+00:00">May 12, 2026 – 8:37 AM</time><h2 id="gemini-for-home-got-a-pre-i-o-update">Gemini for Home got a pre-I/O update</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2032px;"><p class="vanilla-image-block" style="padding-top:57.48%;"><img id="qFporhqHp7V9TyjCFbikVM" name="Google Nest Hub Max.jpg" alt="Google Nest Hub Max" src="https://cdn.mos.cms.futurecdn.net/qFporhqHp7V9TyjCFbikVM.jpg" mos="" align="middle" fullscreen="" width="2032" height="1168" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google doesn't save all it's big announcements for flashy events like I/O and The Android Show. New updates do get released throughout the year, and <a href="https://support.google.com/googlenest/answer/15962877?visit_id=639105699230587677-1743494415&p=app_release_notes&rd=1#zippy=%2Capril%2Cmay" target="_blank">Gemini for Home</a> is the latest one to get some much-needed tweaks.</p><p>Notably, Gemini for Home will stop denying you access to information about alcoholic beverages when all you want is a recipe for some new cocktails. It turned out this was an issue with age-gating, and the controls used to prevent kids from asking about unsuitable topics. Now, all affected adults need to do is make sure parental controls are switched off, and they can ask for all the alcoholic information they like.</p><p>Other updates include speedier responses from the AI, and updating the "Ask Home" feature to accept voice commands. Meaning you can ask more conversational questions using a Nest Hub or similar device, rather than relying on the Google Home app.</p></div><div class="live-content"><time datetime="2026-05-12T13:05:45+00:00">May 12, 2026 – 9:05 AM</time><h2 id="gemini-omni-could-be-coming">Gemini Omni could be coming</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1036px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="jKeAjgfKfdWKDKKvKojg2V" name="Gemini" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/jKeAjgfKfdWKDKKvKojg2V.png" mos="" align="middle" fullscreen="" width="1036" height="583" 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>Google's video-generating AI models are incredibly impressive, and Veo 3 blew our socks off at I/O 2025. Recent leaks now suggest that a new model is on the way, dubbed <a href="https://9to5google.com/2026/05/11/gemini-omni-video-model-shows-up-with-some-early-demos/" target="_blank">Gemini Omni.</a></p><p>Not much is known about Gemini Omni right now. At least one user has been prompted to "Create with Gemini Omni," and metadata suggests that this is an extension of what Google has already accomplished with existing Veo models. </p><p>The user managed to create two AI videos with the prompt, including one of two men eating spaghetti at an upscale restaurant — a reference to the infamous Will Smith video from a fw years back. The other features a professor writing out mathematical proofs on a chalkboard, with impressive results.</p><p>We'll no doubt hear more about this at I/O next week, rather than today's Android Show, but rest assured that AI-generated video is apparently not going anywhere</p></div><div class="live-content"><time datetime="2026-05-12T13:34:11+00:00">May 12, 2026 – 9:34 AM</time><h2 id="we-need-to-hear-more-about-android-xr-glasses-and-soon">We need to hear more about Android XR glasses, and soon</h2><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="fKCbP28rsahvFprF9cuqWC" name="Android XR smart glasses-LIST2" alt="Android XR glasses" src="https://cdn.mos.cms.futurecdn.net/fKCbP28rsahvFprF9cuqWC.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>Smart glasses are everywhere right now, and Google has been promising its own development in that area for what feels like forever. We got to try a <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">demo model at the end of last year</a>, but we're hoping that there will be some kind of news about a more refined model at this year's event.</p><p>And since those glasses would almost certainly run on Android XR, there could be some information during The Android Show. Even if I/O is mainly a software-focused event.</p><p>In an ideal world, we'd be hearing about actual XR glasses we can go out and buy, and how much they'll end up costing us. Or, at the very least, a rough timeframe of when they might go on sale. Considering how much the smart glasses market is heating up, Google can't afford to keep waiting for much longer.</p></div><div class="live-content"><time datetime="2026-05-12T13:56:07+00:00">May 12, 2026 – 9:56 AM</time><h2 id="what-do-you-want-to-hear-about-during-the-android-show">What do you want to hear about during The Android Show?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WVqlJe"></div>                            </div>                            <script src="https://kwizly.com/embed/WVqlJe.js" async></script></div><div class="live-content"><time datetime="2026-05-12T14:33:15+00:00">May 12, 2026 – 10:33 AM</time><h2 id="will-we-hear-about-wear-os-7">Will we hear about Wear OS 7?</h2><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="yUK7WGbaQNpRSYJsSTQfG" name="Pixel-Watch-4-3" alt="Pixel Watch 4 on wrist showing time, weather and heart rate." src="https://cdn.mos.cms.futurecdn.net/yUK7WGbaQNpRSYJsSTQfG.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>A new version of Android means there should be a new version of Wear OS coming with it, but so far we haven't actually heard all that much about it. We assume that it will be called Wear OS 7, and will likely show up on the Pixel Watch 5 before spreading to other smartwatches, but that's it right now.</p><p>Seeing as how the Android Show is about all things Android, now would be the time for Google to start offering up the first few pieces of information about the upcoming update ù and potentially even give us an idea of what to expect from future smartwatches.</p></div><div class="live-content"><time datetime="2026-05-12T15:02:52+00:00">May 12, 2026 – 11:02 AM</time><h2 id="you-can-try-android-17-right-now-in-beta">You can try Android 17 right now (in beta)</h2><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.20%;"><img id="3kWod5vfFi35otShydB6i6" name="Android-17-on-Pixel-9-Pro-XL--LEDE9" alt="Android 17 badge superimposed on a Google Pixel phone" src="https://cdn.mos.cms.futurecdn.net/3kWod5vfFi35otShydB6i6.jpg" mos="" align="middle" fullscreen="" width="2000" height="1124" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>While Android 17 probably won't arrive until late summer, you can take the software for a test drive right now. All you have to do is sign up for the Android 17 beta, and the best part is you don't need a Pixel phone to try it out.</p><p>Various phone makers have opted in for the Android 17 beta in recent weeks. That includes Samsung, has confirmed it will release the Android 17-based One UI 9 beta at some point later this week.</p><p>Here are the phones you can use to sign up for Android 17 beta right now:</p><ul><li>Google Pixel 6 and newer</li><li>Samsung Galaxy S23 and newer</li><li>Samsung Galaxy Z Flip 6, Z Fold 6 and newer</li><li>Galaxy A35, A36, A37, A55, A56 and A57</li><li>Xiaomi 17, 17 Ultra, 15T Pro</li><li>OnePlus 14, 15, Open, Nord 5</li><li>Oppo Find X9 Pro</li><li>Realme GT 8 Pro</li><li>Motorola Edge 70 series, Edge 60 series, G86 series and G57 series</li><li>Motorola Razr Plus 2025 and Razr Plus 2024</li></ul></div><div class="live-content"><time datetime="2026-05-12T15:32:46+00:00">May 12, 2026 – 11:32 AM</time><h2 id="don-t-expect-pixel-11-news-tonight-or-next-week">Don't expect Pixel 11 news tonight — or next week</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1154px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="XT3UDi3a4UHzdbWs5SN5P3" name="Pixel 11 render" alt="Pixel 11 render" src="https://cdn.mos.cms.futurecdn.net/XT3UDi3a4UHzdbWs5SN5P3.jpg" mos="" align="middle" fullscreen="" width="1154" height="649" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks / Android Headlines)</span></figcaption></figure><p>There's been a lot of chatter about the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series in recent weeks, but if there's one thing you shouldn't expect to see during the Android Show (or even at Google I/O proper), it's Google's next smartphone. </p><p>I/O is a very developer-focussed event, with emphasis on software and all the advances that have been made in that area over the past 12 months. Upcoming hardware is pretty inconsequential to all that, and it means Google is unlikely to have anything to say about the Pixel 11 — or other unannounced smart devices. So be sure to temper your expectations before you tune in.</p></div><div class="live-content"><time datetime="2026-05-12T15:59:05+00:00">May 12, 2026 – 11:59 AM</time><h2 id="will-android-xr-make-an-appearance">Will Android XR make an appearance?</h2><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="FqEdAbuhNkFUa2rDMxcEBe" name="Android XR" alt="Android XR text with pictures of people around it" src="https://cdn.mos.cms.futurecdn.net/FqEdAbuhNkFUa2rDMxcEBe.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: <a href="https://blog.google/products/android/android-xr/">Google</a>)</span></figcaption></figure><p>We know Android XR will have a presence at Google I/O next week but it's not clear if Google's take on VR will get a mention during the Android Show today.</p><p>It's felt pretty quiet since the <a href="https://www.tomsguide.com/computing/augmented-reality/galaxy-xr-review">Galaxy XR headset</a> launched last October. Though with Apple reportedly <a href="https://www.tomsguide.com/computing/vr-ar/apple-has-reportedly-stopped-work-on-the-vision-pro-heres-what-we-know">dropping the Vision Pro</a>, perhaps headsets have become less of a priority.<br><br>We're also still waiting for more information on the <a href="https://www.tomsguide.com/computing/smart-glasses/xreals-project-aura-reveals-the-exciting-true-intentions-for-android-xr-but-will-anyone-actually-wear-them">Xreal Project Aura</a> display glasses. Plus, Google has been <a href="https://www.tomsguide.com/computing/smart-glasses/googles-new-android-xr-smart-glasses-use-gemini-to-ai-edit-your-world-while-youre-still-taking-the-photo">teasing AI smart glasses</a> since at least 2024. </p></div><div class="live-content"><time datetime="2026-05-12T16:30:26+00:00">May 12, 2026 – 12:30 PM</time><h2 id="30-minutes-to-showtime">30 minutes to showtime</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2096px;"><p class="vanilla-image-block" style="padding-top:56.39%;"><img id="CtjG22X4bXym6hZHmk28nn" name="android-17-updates-io-26-3" alt="New features that Google has introduced with Android 17" src="https://cdn.mos.cms.futurecdn.net/CtjG22X4bXym6hZHmk28nn.jpg" mos="" align="middle" fullscreen="" width="2096" height="1182" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Reminder, the Android Show kicks off at 10 a.m. PT / 1 p.m. ET / 6 p.m. BST; 30 minutes from now. </p><p>Of course, you can you follow along via the <a href="https://www.youtube.com/watch?v=-Gii_RXT91I" target="_blank">Google YouTube channel</a>.</p></div><div class="live-content"><time datetime="2026-05-12T16:46:36+00:00">May 12, 2026 – 12:46 PM</time><h2 id="the-arrival-of-android-os">The arrival of Android OS</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2128px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="YusrnjfVEraewF8AstbABg" name="chrome os lifestyle.jpg" alt="A person working on a Google Sheet in their browser on a Chromebook" src="https://cdn.mos.cms.futurecdn.net/YusrnjfVEraewF8AstbABg.jpg" mos="" align="middle" fullscreen="" width="2128" height="1198" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>It's weird with the Android Show because it's not clear how much Google will save for I/O versus this extra program.</p><p>So, with that in mind, will the rumored Android/Chrome OS, Aluminum, make an appearance?</p><p>The new OS is supposed to combine Chrome OS and Android mobile together. <a href="https://www.tomsguide.com/computing/chromebooks/googles-combining-chrome-os-and-android-and-its-the-smartest-move-its-made-in-years">Google confirmed the merger</a> was happening last summer but has remained quiet since then.</p></div><div class="live-content"><time datetime="2026-05-12T17:04:58+00:00">May 12, 2026 – 1:04 PM</time><h2 id="android-show-i-o-edition-kicks-off-with-a-brand-new-category">Android Show I/O Edition kicks off with a brand new category</h2><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="hMB2KWdEwYN8GwfrTFQkuQ" name="🎬 Watch The Android Show _ I_O Edition 2026 5-47 screenshot" alt="Android head at Android Show I/O Edition" src="https://cdn.mos.cms.futurecdn.net/hMB2KWdEwYN8GwfrTFQkuQ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Android Show I/O Edition kicks off teasing Gemini, Android Auto, and more, but you'll want to stick around for the end with Google introducing a brand new category.</p></div><div class="live-content"><time datetime="2026-05-12T17:08:32+00:00">May 12, 2026 – 1:08 PM</time><h2 id="google-just-revealed-gemini-intelligence">Google just revealed Gemini Intelligence</h2><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="o74mitjGMdgLu6WXJK7N6n" name="🎬 Watch The Android Show _ I_O Edition 2026 9-11 screenshot" alt="Gemini Intelligence" src="https://cdn.mos.cms.futurecdn.net/o74mitjGMdgLu6WXJK7N6n.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google's making a major rebrand to its efforts around AI, as the company formally introduced <a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever">Gemini Intelligence</a>. Gemini has been a central part of its product strategy, from Search and Gmail to Chrome and Android devices. However, Gemini Intelligence changes the framing by getting more done across different places.</p></div><div class="live-content"><time datetime="2026-05-12T17:10:37+00:00">May 12, 2026 – 1:10 PM</time><h2 id="chrome-gets-automation-feature-courtesy-of-gemini-intelligence">Chrome gets automation feature courtesy of Gemini Intelligence</h2><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="6AAMqrZ3r8foVGrGo7nrGE" name="🎬 Watch The Android Show _ I_O Edition 2026 11-14 screenshot" alt="Gemini on the web via Chrome" src="https://cdn.mos.cms.futurecdn.net/6AAMqrZ3r8foVGrGo7nrGE.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google is bringing Gemini deeper into Chrome, by doing stuff like summarizing articles, answer questions about web pages and help with tasks such as booking travel. For example, Gemini Intelligence can quickly fill out forms with details by using the information it knows on your phone.</p></div><div class="live-content"><time datetime="2026-05-12T17:12:51+00:00">May 12, 2026 – 1:12 PM</time><h2 id="gboard-gets-smarter-with-rambler">Gboard gets smarter with Rambler</h2><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="ohPceUsbTYpkEHShbNZMSY" name="🎬 Watch The Android Show _ I_O Edition 2026 14-7 screenshot" alt="Rambler on Android" src="https://cdn.mos.cms.futurecdn.net/ohPceUsbTYpkEHShbNZMSY.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>You won't have to enunciate your words as much when you're using Gboard's new Rambler feature because it can understand your voice, even when you mess up or want to say something else. It's really fascinating how well it can also understand accents with accuracy, so you can rely on this voice dictation rather than physically type it yourself.</p></div><div class="live-content"><time datetime="2026-05-12T17:15:36+00:00">May 12, 2026 – 1:15 PM</time><h2 id="build-your-own-widget-using-gemini-intelligence">Build your own widget using Gemini Intelligence</h2><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="MYyHLDFGcTA3UnXUFbdq7m" name="🎬 Watch The Android Show _ I_O Edition 2026 16-2 screenshot" alt="Create your own widgets using Gemini" src="https://cdn.mos.cms.futurecdn.net/MYyHLDFGcTA3UnXUFbdq7m.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Who says you need to be an Android developer to create widgets? You'll now be able to create your own widget across different devices with ease with the help of Gemini Intelligence. Best of all, you can tailor it to what you need exactly.</p></div><div class="live-content"><time datetime="2026-05-12T17:23:11+00:00">May 12, 2026 – 1:23 PM</time><h2 id="instagram-is-getting-major-upgrades-but-there-s-a-catch">Instagram is getting major upgrades, but there's a catch</h2><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="ZhdYDnHBbDsYrjDF5vY3mJ" name="🎬 Watch The Android Show _ I_O Edition 2026 19-8 screenshot" alt="Instant Reactions on Android" src="https://cdn.mos.cms.futurecdn.net/ZhdYDnHBbDsYrjDF5vY3mJ.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google is transforming Android 17 into a creative powerhouse by introducing Screen Reactions, a native tool that allows users to record their screen and themselves simultaneously for seamless reaction videos. Plus, anew partnership with Meta brings Ultra HDR support and Night Sight integration to Instagram. However, the camera centric tools appear to be reserved for Pixels.</p></div><div class="live-content"><time datetime="2026-05-12T17:25:11+00:00">May 12, 2026 – 1:25 PM</time><h2 id="emojis-go-3d-with-android-17">Emojis go 3D with Android 17</h2><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="PAWPwmXqPs5JFHtQCaHSKd" name="🎬 Watch The Android Show _ I_O Edition 2026 22-3 screenshot" alt="Upgraded Android emojis" src="https://cdn.mos.cms.futurecdn.net/PAWPwmXqPs5JFHtQCaHSKd.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google is finally addressing a long-standing Android weak point by introducing redesigned 3D emojis that offer a more expressive, physical feel similar to those on the iPhone. These updated characters will begin rolling out later this year, with Pixel devices being the first to receive the new look.</p></div><div class="live-content"><time datetime="2026-05-12T17:26:54+00:00">May 12, 2026 – 1:26 PM</time><h2 id="android-auto-gets-a-massive-makeover">Android Auto gets a massive makeover</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/WfzX4YHa2RFigMoLPgKidQ.png" alt="Android Auto on Mini Cooper" /><figcaption><small role="credit">Google</small></figcaption></figure></figure><p>Drivers using <a href="https://www.tomsguide.com/phones/android-auto-is-about-to-change-the-way-you-drive-3d-google-maps-redesigned-interface-video-support-gemini-and-more">Android Auto</a> are about to get a totally revamped experience that are now better optimized for different screens, a more immersive navigation with 3D Google Maps, video playback support, and much more.</p></div><div class="live-content"><time datetime="2026-05-12T17:28:41+00:00">May 12, 2026 – 1:28 PM</time><h2 id="gemini-intelligence-comes-to-android-auto">Gemini Intelligence comes to Android Auto</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Jn9D2iRZhm5VNbqoGhabgN" name="Android Auto -- Magic Cue.GIF" alt="Android Auto Magic Cue." src="https://cdn.mos.cms.futurecdn.net/Jn9D2iRZhm5VNbqoGhabgN.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Gemini Intelligence will help you driver better and safer with Android Auto because you'll be able to lean on the AI chatbot to perform complex tasks, like ordering food at a restaurant, by simply speaking it.</p></div><div class="live-content"><time datetime="2026-05-12T17:30:20+00:00">May 12, 2026 – 1:30 PM</time><h2 id="cars-with-google-built-in-gets-more-accurate-lane-guidance">Cars with Google built-in gets more accurate lane guidance</h2><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="Jg6QHbfv43TYDPVdU2Kznj" name="🎬 Watch The Android Show _ I_O Edition 2026 27-54 screenshot" alt="Immersive Navigation in Android Auto" src="https://cdn.mos.cms.futurecdn.net/Jg6QHbfv43TYDPVdU2Kznj.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Cars with Google built-in will have a better Google Maps experience that can use the vehicle's camera to know which lane you're in and tell you explicitly which lane to get into for your exit.</p></div><div class="live-content"><time datetime="2026-05-12T17:32:03+00:00">May 12, 2026 – 1:32 PM</time><h2 id="watch-videos-through-android-auto">Watch videos through Android Auto</h2><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="up76bDMGoomb8GqxqapYs4" name="🎬 Watch The Android Show _ I_O Edition 2026 28-36 screenshot" alt="Videos on Android Auto" src="https://cdn.mos.cms.futurecdn.net/up76bDMGoomb8GqxqapYs4.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Paris Hilton was tapped to talk about the new video playback support with Android Auto, which is a long time coming. Not only will you be able to play videos on YouTube, but it'll transition to an audio-only format when you start driving.</p></div><div class="live-content"><time datetime="2026-05-12T17:35:30+00:00">May 12, 2026 – 1:35 PM</time><h2 id="google-announces-a-new-product-category-googlebook-laptops">Google announces a new product category: Googlebook laptops</h2><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="XYUsKK8wgc7tS5bTwbLRFV" name="🎬 Watch The Android Show _ I_O Edition 2026 34-28 screenshot" alt="Googlebook reveal" src="https://cdn.mos.cms.futurecdn.net/XYUsKK8wgc7tS5bTwbLRFV.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>It's not meant to replace its Chromebooks, but Google saved the end of its event to talk a bit about its new product category: <a href="https://www.tomsguide.com/computing/laptops/google-announces-high-end-googlebook-laptops-to-compete-with-macbooks-heres-what-you-need-to-know">Googlebook laptops. </a></p><p>Google is challenging the MacBook’s dominance with the launch of Googlebook, a new category of premium, Android-powered laptops built specifically for Gemini Intelligence. These high-end computing devices feature deep AI integration, such as a Magic Pointer for contextual tasks, and a seamless ecosystem that runs Android apps natively.</p></div><div class="live-content"><time datetime="2026-05-12T17:37:32+00:00">May 12, 2026 – 1:37 PM</time><h2 id="key-partners-tapped-to-create-googlebook-laptops">Key partners tapped to create Googlebook laptops</h2><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="Qtf6o6dchZpUotV8nDCMBC" name="🎬 Watch The Android Show _ I_O Edition 2026 38-38 screenshot" alt="Googlebar on Googlebook" src="https://cdn.mos.cms.futurecdn.net/Qtf6o6dchZpUotV8nDCMBC.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Major partners like Acer, ASUS, and Dell are set to produce these sleek devices, which include a signature glowing Glowbar on the keyboard to distinguish these Googlebooks from other laptops.</p></div><div class="live-content"><time datetime="2026-05-12T17:40:35+00:00">May 12, 2026 – 1:40 PM</time><h2 id="stay-tuned-for-more-at-google-i-o-2026">Stay tuned for more at Google I/O 2026</h2><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="TRW83J7V83tKpr78gjhFaS" name="🎬 Watch The Android Show _ I_O Edition 2026 41-5 screenshot" alt="Android Show I/O Edition That's a Wrap" src="https://cdn.mos.cms.futurecdn.net/TRW83J7V83tKpr78gjhFaS.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>And that's a wrap! There's a special developers cut of the Android Show that'll be running shortly, but there's still going to be way more new things introduced at Google I/O 2026.</p></div><div class="live-content"><time datetime="2026-05-12T17:59:46+00:00">May 12, 2026 – 1:59 PM</time><h2 id="gemini-intelligence-redefines-android-experience">Gemini Intelligence redefines Android experience</h2><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="jHXvNikHWRA6anVLpDjuU5" name="🎬 Watch The Android Show _ I_O Edition 2026 17-3 screenshot" alt="Gemini Intelligence" src="https://cdn.mos.cms.futurecdn.net/jHXvNikHWRA6anVLpDjuU5.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google just gave us a <a href="https://www.tomsguide.com/phones/android-phones/android-17-io-2026-upgrades">massive preview of the future</a> at the Android Show, headlined by the debut of Gemini Intelligence for deeper app automation. Beyond the AI, users can look forward to a complete visual overhaul with 3D emojis and enhanced cross-platform compatibility that makes Android and iPhone communication smoother than ever. From revolutionary multitasking tools to smarter system-wide integration, Android 17 is shaping up to be the most ambitious update in years.</p></div><div class="live-content"><time datetime="2026-05-12T18:17:37+00:00">May 12, 2026 – 2:17 PM</time><h2 id="gemini-intelligence-isn-t-a-feature-it-s-a-system-deeply-integrated-into-its-platforms">Gemini Intelligence isn't a feature, it's a system deeply integrated into its platforms</h2><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="6AAMqrZ3r8foVGrGo7nrGE" name="🎬 Watch The Android Show _ I_O Edition 2026 11-14 screenshot" alt="Gemini on the web via Chrome" src="https://cdn.mos.cms.futurecdn.net/6AAMqrZ3r8foVGrGo7nrGE.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Google isn't just making <a href="https://www.tomsguide.com/ai/google-just-revealed-gemini-intelligence-and-it-could-change-android-forever">Gemini Intelligence </a>a feature that devices running Android can tap into, but rather, it's a totally new system that will be a fundamental pillar across everything.  One of the best examples of this is how it's being used in Chrome to perform tasks that normally would take time.</p><p>The best example is filling out a form on Chrome about your travel arrangements, like the details of your passport. Rather than waste the time looking back and forth between a snapshot you've captured with your camera, Gemini Intelligence can search all the information it finds and populates the details into the form for you.</p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Don't wait for the $2,000 iPhone Fold when the Pixel Fold price just crashed to $449 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple’s rumored to launch its first foldable phone perhaps later this year, and while an iPhone Fold is tempting, it’s probably going to be priced a lot like some other book-style foldables at around $2,000. If you want that foldable experience without draining your savings, I suggest taking a peek at the <a href="https://electronics.woot.com/offers/new-google-pixel-fold-5g-smartphone-256gb-1" target="_blank" rel="nofollow">Pixel Fold</a>, which is currently down to an all-time low of $449.  </p><p>Woot is offering an insane 75% instant discount on Google's first foldable, bringing the price down to $449. That’s actually better than the <a href="https://www.tomsguide.com/phones/google-pixel-phones/not-a-typo-this-insane-73-percent-off-deal-makes-the-pixel-fold-cheaper-than-the-pixel-9a">deal I saw earlier this year</a> when it hit $479 at a 73% discount. Considering the phone launched at $1,799, this is a massive saving for those willing to pick up a slightly older model. Here’s why I think it’s worth getting.</p><div class="product"><a data-dimension112="9966a112-458b-4d63-81c6-49fb3582f59e" data-action="Deal Block" data-label="Pixel Fold" data-dimension48="Pixel Fold" data-dimension25="$449.99" href="https://electronics.woot.com/offers/new-google-pixel-fold-5g-smartphone-256gb-1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:650px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="NMDJF9EBXDbBT6cyUsUJFR" name="Pixel Fold deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NMDJF9EBXDbBT6cyUsUJFR.jpg" mos="" align="middle" fullscreen="" width="650" height="650" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Google Pixel Fold gives you a 5.8-inch display up front and a huge 7.6-inch OLED screen on the inside for watching videos and multitasking. You also get a solid triple rear camera setup, good battery life and plenty of optimized apps. The $449 price is by far the lowest ever we've seen on this foldable phone.<a class="view-deal button" href="https://electronics.woot.com/offers/new-google-pixel-fold-5g-smartphone-256gb-1" target="_blank" rel="nofollow" data-dimension112="9966a112-458b-4d63-81c6-49fb3582f59e" data-action="Deal Block" data-label="Pixel Fold" data-dimension48="Pixel Fold" data-dimension25="$449.99">View Deal</a></p></div><p>When it launched, Google promised <a href="https://support.google.com/pixelphone/answer/4457705#zippy=%2Cpixel-a-pixel-pixel-pro-pixel-a-pixel-pixel-pro-pixel-fold" target="_blank">five years of software updates</a> — meaning it should last until May 2028. That’s music to my ears because it should receive <a href="https://www.tomsguide.com/phones/android-phones/get-your-pixels-ready-android-17-beta-1-just-arrived-with-a-bunch-of-new-features">Android 17</a> when it is released later this year. With <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-i-o-2026-date-time-potential-announcements-and-everything-else-you-need-to-know">Google I/O 2026</a> slated to start in less than two weeks, we’ll soon know exactly which new changes and features to expect.</p><p>Regarding 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</a>, it’s still hard to wrap my head around the idea of paying upwards of $2,000 for any phone. I don’t expect Apple to be ultra-aggressive with pricing, but this Pixel Fold deal certainly exposes the price disparity. Even though it’s three years old at this point, the Pixel Fold remains a solid device, packing a 5.8-inch outer screen and an even larger 7.6-inch OLED main display.</p><p>There’s also the matter of the cameras, where the Pixel has an inherent advantage over the iPhone Fold’s expected dual-camera setup. Specifically, the Pixel Fold features a dedicated 10.8MP telephoto camera with 5x optical zoom. Leaks indicate the iPhone Fold will likely pack a 48MP main shooter and a 48MP ultrawide, meaning it would have to rely on the main camera for all zooming tasks. Based on my experience shooting with the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phones</a>, no amount of sensor cropping or digital zoom can match the quality of an optically backed telephoto lens.</p><p>Finally, you’re getting a new phone that is unlocked out of the box, making it incredibly easy to connect to your wireless service. I still can’t get over the $449 price point — it’s effectively less than buying a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10a-review">Pixel 10a</a>, which is currently the <a href="https://www.tomsguide.com/best-picks/best-cheap-phones">best cheap phone</a> around. Yet, the Pixel Fold gives you two displays, a more versatile camera system, and all the multitasking advantages that come with the foldable form factor.</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/im-stoked-for-the-iphone-fold-but-theres-something-else-that-should-be-a-much-higher-priority-than-a-thin-design">I want a thin iPhone Fold, but I won't buy it unless Apple finally fixes multitasking in iOS</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-lived-with-the-galaxy-z-flip-7-for-8-months-6-improvements-im-holding-out-for-with-the-galaxy-z-flip-8">I lived with the Galaxy Z Flip 7 for 8 months — 6 improvements I’m holding out for with the Galaxy Z Flip 8</a></li><li><a href="https://www.tomsguide.com/phones/i-swapped-my-galaxy-s26-for-this-blackberry-clone-with-a-physical-keyboard-for-a-week-and-im-honestly-embarrassed-by-how-much-i-like-it">I swapped my Galaxy S26 for this BlackBerry clone with a physical keyboard for a week and I’m honestly embarrassed by how much I like it</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/dont-wait-for-the-usd2-000-iphone-fold-when-the-pixel-fold-price-just-crashed-to-usd449</link>
                                                                            <description>
                            <![CDATA[ Woot brings the Pixel Fold down to its all-time lowest price thanks to a 75% off discount that brings it to $449. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">bU5Ru3mmGGgxANpoDvbyfe</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/2xofnuqVWiwBHjjT5pnt8T-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 07 May 2026 16:32:59 +0000</pubDate>                                                                                                                                <updated>Fri, 08 May 2026 01:20:29 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.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/2xofnuqVWiwBHjjT5pnt8T-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Pixel Fold held in the hand with badge nearby.]]></media:description>                                                            <media:text><![CDATA[Pixel Fold held in the hand with badge nearby.]]></media:text>
                                <media:title type="plain"><![CDATA[Pixel Fold held in the hand with badge nearby.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/2xofnuqVWiwBHjjT5pnt8T-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple’s rumored to launch its first foldable phone perhaps later this year, and while an iPhone Fold is tempting, it’s probably going to be priced a lot like some other book-style foldables at around $2,000. If you want that foldable experience without draining your savings, I suggest taking a peek at the <a href="https://electronics.woot.com/offers/new-google-pixel-fold-5g-smartphone-256gb-1" target="_blank" rel="nofollow">Pixel Fold</a>, which is currently down to an all-time low of $449.  </p><p>Woot is offering an insane 75% instant discount on Google's first foldable, bringing the price down to $449. That’s actually better than the <a href="https://www.tomsguide.com/phones/google-pixel-phones/not-a-typo-this-insane-73-percent-off-deal-makes-the-pixel-fold-cheaper-than-the-pixel-9a">deal I saw earlier this year</a> when it hit $479 at a 73% discount. Considering the phone launched at $1,799, this is a massive saving for those willing to pick up a slightly older model. Here’s why I think it’s worth getting.</p><div class="product"><a data-dimension112="9966a112-458b-4d63-81c6-49fb3582f59e" data-action="Deal Block" data-label="Pixel Fold" data-dimension48="Pixel Fold" data-dimension25="$449.99" href="https://electronics.woot.com/offers/new-google-pixel-fold-5g-smartphone-256gb-1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:650px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="NMDJF9EBXDbBT6cyUsUJFR" name="Pixel Fold deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NMDJF9EBXDbBT6cyUsUJFR.jpg" mos="" align="middle" fullscreen="" width="650" height="650" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Google Pixel Fold gives you a 5.8-inch display up front and a huge 7.6-inch OLED screen on the inside for watching videos and multitasking. You also get a solid triple rear camera setup, good battery life and plenty of optimized apps. The $449 price is by far the lowest ever we've seen on this foldable phone.<a class="view-deal button" href="https://electronics.woot.com/offers/new-google-pixel-fold-5g-smartphone-256gb-1" target="_blank" rel="nofollow" data-dimension112="9966a112-458b-4d63-81c6-49fb3582f59e" data-action="Deal Block" data-label="Pixel Fold" data-dimension48="Pixel Fold" data-dimension25="$449.99">View Deal</a></p></div><p>When it launched, Google promised <a href="https://support.google.com/pixelphone/answer/4457705#zippy=%2Cpixel-a-pixel-pixel-pro-pixel-a-pixel-pixel-pro-pixel-fold" target="_blank">five years of software updates</a> — meaning it should last until May 2028. That’s music to my ears because it should receive <a href="https://www.tomsguide.com/phones/android-phones/get-your-pixels-ready-android-17-beta-1-just-arrived-with-a-bunch-of-new-features">Android 17</a> when it is released later this year. With <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-i-o-2026-date-time-potential-announcements-and-everything-else-you-need-to-know">Google I/O 2026</a> slated to start in less than two weeks, we’ll soon know exactly which new changes and features to expect.</p><p>Regarding 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</a>, it’s still hard to wrap my head around the idea of paying upwards of $2,000 for any phone. I don’t expect Apple to be ultra-aggressive with pricing, but this Pixel Fold deal certainly exposes the price disparity. Even though it’s three years old at this point, the Pixel Fold remains a solid device, packing a 5.8-inch outer screen and an even larger 7.6-inch OLED main display.</p><p>There’s also the matter of the cameras, where the Pixel has an inherent advantage over the iPhone Fold’s expected dual-camera setup. Specifically, the Pixel Fold features a dedicated 10.8MP telephoto camera with 5x optical zoom. Leaks indicate the iPhone Fold will likely pack a 48MP main shooter and a 48MP ultrawide, meaning it would have to rely on the main camera for all zooming tasks. Based on my experience shooting with the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phones</a>, no amount of sensor cropping or digital zoom can match the quality of an optically backed telephoto lens.</p><p>Finally, you’re getting a new phone that is unlocked out of the box, making it incredibly easy to connect to your wireless service. I still can’t get over the $449 price point — it’s effectively less than buying a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10a-review">Pixel 10a</a>, which is currently the <a href="https://www.tomsguide.com/best-picks/best-cheap-phones">best cheap phone</a> around. Yet, the Pixel Fold gives you two displays, a more versatile camera system, and all the multitasking advantages that come with the foldable form factor.</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/im-stoked-for-the-iphone-fold-but-theres-something-else-that-should-be-a-much-higher-priority-than-a-thin-design">I want a thin iPhone Fold, but I won't buy it unless Apple finally fixes multitasking in iOS</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-lived-with-the-galaxy-z-flip-7-for-8-months-6-improvements-im-holding-out-for-with-the-galaxy-z-flip-8">I lived with the Galaxy Z Flip 7 for 8 months — 6 improvements I’m holding out for with the Galaxy Z Flip 8</a></li><li><a href="https://www.tomsguide.com/phones/i-swapped-my-galaxy-s26-for-this-blackberry-clone-with-a-physical-keyboard-for-a-week-and-im-honestly-embarrassed-by-how-much-i-like-it">I swapped my Galaxy S26 for this BlackBerry clone with a physical keyboard for a week and I’m honestly embarrassed by how much I like it</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 'Not happening! Y'all are wild': Google shoots down rumors Android will copy  the iPhone's Liquid Glass design ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Human beings are creatures of habit, and they like familiarity in most aspects of their lives. Smartphones are no exception, and there's definitely something comforting about being able to look at your phone and know where everything is. So it's no surprise that redesigning the software always seems to be as well-received as a punch in the face. <a href="https://www.tomsguide.com/phones/iphones/ios-26-review-new-features-liquid-glass">iOS 26's</a> switch <a href="https://www.tomsguide.com/phones/iphones/ios-26s-biggest-selling-point-is-the-one-thing-i-dislike-the-most">to the Liquid Glass aesthetic</a> was no exception to that trend.</p><p>Often, we see rival phone makers brazenly following Apple, and Liquid Glass has been swiftly copied by various companies. <a href="https://www.tomsguide.com/phones/android-phones/ios-26s-liquid-glass-has-already-been-copied-for-an-android-phone-and-the-differences-arent-even-subtle">Vivo has adopted a similar design</a> on its own phones, and the likes of Oppo and Samsung have added more glass-like elements to their UI. But do you know who won't be mimicking Apple's style on its phones? Google.</p><p>Sameer Samat, President of the Android Ecosystem at Google, has explicitly said that Liquid Glass is not coming to Pixel 11. It seems that some people <a href="https://x.com/ssamat/status/2051708864001958078" target="_blank">saw the teaser </a>for the upcoming <a href="https://www.tomsguide.com/phones/android-phones/biggest-year-for-android-yet-android-show-i-o-edition-returns-in-may-and-heres-what-i-expect">Android Show: I/O Edition</a>, featuring the Android mascot turning translucent, as confirmation that some sort of Liquid Glass-like effect would be coming to Android, too. </p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2051746719055204579"><p lang="en" dir="ltr">Not happening! Y'all are wild. 😂<a href="https://twitter.com/cantworkitout/status/2051746719055204579">May 5, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>But that is not the case. "Not happening!" Samat <a href="https://x.com/ssamat/status/2051746719055204579" target="_blank">said on X</a> before adding, "Ya'll are wild." That's pretty definitive and doesn't leave a lot of room for any misinterpretation. An Android-ified version of Liquid Glass isn't coming to<a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far"> Pixel 11</a>, and presumably won't be arriving on any other Google handset either.</p><p>As to why the Android mascot turns translucent, with that colorful light show going on inside it? I have no idea. If I were to guess, I'd say that it's probably something to do with <a href="https://www.tomsguide.com/ai/i-switched-from-chatgpt-to-gemini-for-one-week-and-heres-why-im-going-back-to-chatgpt">Gemini</a> and AI, since various versions of the Gemini logo use similar colors — in addition to the traditional Google hues.</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:1518px;"><p class="vanilla-image-block" style="padding-top:56.19%;"><img id="g92kU66XjZHYkmGim2H4KL" name="Screenshot 2026-05-07 111255" alt="android mascot in translucent gemini-looking colors" src="https://cdn.mos.cms.futurecdn.net/g92kU66XjZHYkmGim2H4KL.png" mos="" align="middle" fullscreen="" width="1518" height="853" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Considering how hard Google has been pushing AI over the past few years, it's guaranteed that Gemini is going to continue playing a huge part in Android going forward. So it makes sense that there would be a lot of emphasis on artificial intelligence throughout the Google I/O developer conference.</p><p>It's impossible to say how well Liquid Glass has been received by the masses, because people are far more likely to complain online than sing its praises. But considering some of the criticism Apple has received for implementing Liquid Glass, and the fact that customization options were only added months later, it would be crazy for Google to copy the design — especially so quickly.</p><p>We don't know what Google has planned for I/O, aside from a heavy focus on AI, but you can read up on what we expect to see in our<a href="https://www.tomsguide.com/phones/google-pixel-phones/google-i-o-2026-date-time-potential-announcements-and-everything-else-you-need-to-know"> Google I/O hub</a>. </p><p>The Android Show is set to take place on May 12 at 1 p.m. ET/10 a.m. PT, while the I/O conference itself kicks off with a keynote address at 1 p.m. ET/10 a.m. PT.</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/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">Pixel 11 battery capacity just leaked and it has me worried about Google's next flagship</a></li><li><a href="https://www.tomsguide.com/phones/how-to-enable-google-maps-accurate-ev-battery-prediction">I tried this new Google Maps feature for electric cars and it finally made me forget about range anxiety</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">How to turn on Galaxy S26's Now Nudge, and how it works</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/not-happening-yall-are-crazy-google-shoots-down-rumors-android-will-copy-the-iphones-liquid-glass-design</link>
                                                                            <description>
                            <![CDATA[ Other phone makers may be happy to copy aspects of Liquid Glass for their phones, but Google claims it isn't one of them. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">FNYpSrncvhpMYdSD8brbAg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/yXrgrKGgChZYR82E5qinEW-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 07 May 2026 10:39:06 +0000</pubDate>                                                                                                                                <updated>Thu, 07 May 2026 12:15:26 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/yXrgrKGgChZYR82E5qinEW-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iOS 26 developer beta running on iPhone showing Liquid Glass interface.]]></media:description>                                                            <media:text><![CDATA[iOS 26 developer beta running on iPhone showing Liquid Glass interface.]]></media:text>
                                <media:title type="plain"><![CDATA[iOS 26 developer beta running on iPhone showing Liquid Glass interface.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/yXrgrKGgChZYR82E5qinEW-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Human beings are creatures of habit, and they like familiarity in most aspects of their lives. Smartphones are no exception, and there's definitely something comforting about being able to look at your phone and know where everything is. So it's no surprise that redesigning the software always seems to be as well-received as a punch in the face. <a href="https://www.tomsguide.com/phones/iphones/ios-26-review-new-features-liquid-glass">iOS 26's</a> switch <a href="https://www.tomsguide.com/phones/iphones/ios-26s-biggest-selling-point-is-the-one-thing-i-dislike-the-most">to the Liquid Glass aesthetic</a> was no exception to that trend.</p><p>Often, we see rival phone makers brazenly following Apple, and Liquid Glass has been swiftly copied by various companies. <a href="https://www.tomsguide.com/phones/android-phones/ios-26s-liquid-glass-has-already-been-copied-for-an-android-phone-and-the-differences-arent-even-subtle">Vivo has adopted a similar design</a> on its own phones, and the likes of Oppo and Samsung have added more glass-like elements to their UI. But do you know who won't be mimicking Apple's style on its phones? Google.</p><p>Sameer Samat, President of the Android Ecosystem at Google, has explicitly said that Liquid Glass is not coming to Pixel 11. It seems that some people <a href="https://x.com/ssamat/status/2051708864001958078" target="_blank">saw the teaser </a>for the upcoming <a href="https://www.tomsguide.com/phones/android-phones/biggest-year-for-android-yet-android-show-i-o-edition-returns-in-may-and-heres-what-i-expect">Android Show: I/O Edition</a>, featuring the Android mascot turning translucent, as confirmation that some sort of Liquid Glass-like effect would be coming to Android, too. </p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2051746719055204579"><p lang="en" dir="ltr">Not happening! Y'all are wild. 😂<a href="https://twitter.com/cantworkitout/status/2051746719055204579">May 5, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>But that is not the case. "Not happening!" Samat <a href="https://x.com/ssamat/status/2051746719055204579" target="_blank">said on X</a> before adding, "Ya'll are wild." That's pretty definitive and doesn't leave a lot of room for any misinterpretation. An Android-ified version of Liquid Glass isn't coming to<a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far"> Pixel 11</a>, and presumably won't be arriving on any other Google handset either.</p><p>As to why the Android mascot turns translucent, with that colorful light show going on inside it? I have no idea. If I were to guess, I'd say that it's probably something to do with <a href="https://www.tomsguide.com/ai/i-switched-from-chatgpt-to-gemini-for-one-week-and-heres-why-im-going-back-to-chatgpt">Gemini</a> and AI, since various versions of the Gemini logo use similar colors — in addition to the traditional Google hues.</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:1518px;"><p class="vanilla-image-block" style="padding-top:56.19%;"><img id="g92kU66XjZHYkmGim2H4KL" name="Screenshot 2026-05-07 111255" alt="android mascot in translucent gemini-looking colors" src="https://cdn.mos.cms.futurecdn.net/g92kU66XjZHYkmGim2H4KL.png" mos="" align="middle" fullscreen="" width="1518" height="853" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>Considering how hard Google has been pushing AI over the past few years, it's guaranteed that Gemini is going to continue playing a huge part in Android going forward. So it makes sense that there would be a lot of emphasis on artificial intelligence throughout the Google I/O developer conference.</p><p>It's impossible to say how well Liquid Glass has been received by the masses, because people are far more likely to complain online than sing its praises. But considering some of the criticism Apple has received for implementing Liquid Glass, and the fact that customization options were only added months later, it would be crazy for Google to copy the design — especially so quickly.</p><p>We don't know what Google has planned for I/O, aside from a heavy focus on AI, but you can read up on what we expect to see in our<a href="https://www.tomsguide.com/phones/google-pixel-phones/google-i-o-2026-date-time-potential-announcements-and-everything-else-you-need-to-know"> Google I/O hub</a>. </p><p>The Android Show is set to take place on May 12 at 1 p.m. ET/10 a.m. PT, while the I/O conference itself kicks off with a keynote address at 1 p.m. ET/10 a.m. PT.</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/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship">Pixel 11 battery capacity just leaked and it has me worried about Google's next flagship</a></li><li><a href="https://www.tomsguide.com/phones/how-to-enable-google-maps-accurate-ev-battery-prediction">I tried this new Google Maps feature for electric cars and it finally made me forget about range anxiety</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">How to turn on Galaxy S26's Now Nudge, and how it works</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Pixel 11 battery capacity just leaked and it has me worried about Google's next flagship ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google Pixel leaks are a very common occurrence, and the mass leaking of specs feels like it's been an annual tradition since the months running up to the launch of the <a href="https://www.tomsguide.com/us/google-pixel-3,review-5841.html">Pixel 3</a>. I have very mixed feelings about the fact that Google's mobile division is about as secure as a wet paper bag. <br><br>On the one hand, it's quite useful to have an idea of what's coming ahead of the big launch event, but I'm also fully aware that specs alone can be misleading — and could potentially cause issues. I say this because a boatload of <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series specs leaked earlier this week, including information about the batteries in all four devices.</p><p>Unfortunately, the news isn't good, leaving me worried that Google still isn't taking Pixel battery life seriously.</p><h2 id="the-state-of-pixel-11-batteries-as-we-currently-know-it">The state of Pixel 11 batteries (as we currently know it) </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5045px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5z8CCZZf9NKxxkckS7irYH" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/5z8CCZZf9NKxxkckS7irYH.jpg" mos="" align="middle" fullscreen="" width="5045" height="2838" 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>The leaked Pixel 11 specs came from a leaker who goes by the handle Mystic Leaks. They didn't reveal every last detail about the four phones, but the list does include battery capacities. While the figures themselves aren't too disappointing, they are all noticeably lower than those of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery capacity</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 (rumored)</strong></p></td><td  ><p>4,840 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10</strong></p></td><td  ><p>4,970 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro (rumored)</strong></p></td><td  ><p>4,707 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro</strong></p></td><td  ><p>4,870 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro XL (rumored)</strong></p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro XL</strong></p></td><td  ><p>5,200 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro Fold (rumored)</strong></p></td><td  ><p>4,658 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro Fold</strong></p></td><td  ><p>5,015 mAh</p></td></tr></tbody></table></div><p>Assuming these specs are correct, the Pixel 11 comes out the best with a loss of just 130 mAh of battery capacity, while the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro </a>ups that difference to 163 mAh. The 11 Pro XL loses 200 mAh, though it retains the respectable-sounding 5,000 mAh of capacity in the process. Sadly, the Pixel 11 Pro Fold comes out worst for wear, losing 357 mAh of battery. </p><p>Considering the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a> didn't have amazing battery life to begin with (12 hours and 13 minutes), that's likely going to have an impact on its daily lifespan.<br><br>I will point out that these figures are rather high for premium phones. The Pixel 11 Pro XL's 5,000 mAh cell is about standard for the largest flagship variants, but the entry-level model usually ends up with significantly lower battery capacity than its compatriots. The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> have 4,300 mAh and 3,692 mAh, respectively, which are peanuts compared to the Pixel 11's rumored 4,840 mAh. <br><br>In fact, it's almost unheard of for the entry-level phone to have a bigger battery than its Pro counterpart, but Google may be about to do it for two years in a row. What I mean is, compared to other popular phones, Pixel owners are eating pretty well in the battery department. </p><p>But that doesn't change the fact Google has a turbulent history with battery life, and the loss of any capacity is cause for concern.</p><h2 id="battery-life-has-been-a-recurring-problem-on-pixels">Battery life has been a recurring problem on Pixels </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4807px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9c3ueCk5mHTCmZ4EjpohUG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/9c3ueCk5mHTCmZ4EjpohUG.jpg" mos="" align="middle" fullscreen="" width="4807" height="2704" 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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery life (Hrs:Mins)</strong></p></td><td  ><p><strong>Battery Capacity (mAh)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10</strong></p></td><td  ><p>13:13</p></td><td  ><p>4,970</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro</strong></p></td><td  ><p>13:43</p></td><td  ><p>4,870</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro XL</strong></p></td><td  ><p>14:20</p></td><td  ><p>5,200</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 9</strong></p></td><td  ><p>12:30</p></td><td  ><p>4,700</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 9 Pro</strong></p></td><td  ><p>13:37</p></td><td  ><p>4,700</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 9 Pro XL</strong></p></td><td  ><p>14:37</p></td><td  ><p>5,050</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 8</strong></p></td><td  ><p>9:59</p></td><td  ><p>4,575 </p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 8 Pro</strong></p></td><td  ><p>10:03</p></td><td  ><p>5,050</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 7</strong></p></td><td  ><p>7:13</p></td><td  ><p>4,355</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 7 Pro</strong></p></td><td  ><p>8:03</p></td><td  ><p>5,000</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 6</strong></p></td><td  ><p>8:13</p></td><td  ><p>4,614</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 6 Pro</strong></p></td><td  ><p>7:55</p></td><td  ><p>5,000</p></td></tr></tbody></table></div><p>There's a reason why you've never seen a Pixel phone on our <a href="https://www.tomsguide.com/us/smartphones-best-battery-life,review-2857.html">best phone battery life</a> page: the battery life on Pixel phones used to be absolutely awful. Things have gotten a lot better in recent years, but even the best Pixel batteries can't seem to hold a candle to the likes of OnePlus, iPhone, or even certain Galaxy smartphones.</p><p>The Tom's Guide battery test involves setting a phone's display to 150 nits and running a custom script that forces a phone to continually surf the web over a 5G connection until the battery runs out. Out of all the phones we've tested, the longest lasting is the <a href="https://www.tomsguide.com/phones/oneplus-phones/oneplus-15-review">OnePlus 15</a>, which scored 25 hours and 13 minutes — a result that's aided by the phone's enormous 7,300 mAh silicon nanostack battery technology.</p><p>Meanwhile, the longest-lasting Pixel 10 series phone is the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL</a>, with the 5,200 mAh battery lasting 14 hours and 20 minutes. The worst result of the Pixel 10 series came from the Pixel 10 Pro Fold, which lasted 12 hours and 16 minutes before dying.</p><p>That's still a considerable improvement compared to the <a href="https://www.tomsguide.com/reviews/google-pixel-7">Pixel 7</a>, which only lasted 7 hours and 13 minutes when it was released in 2023. Before anyone suggests that this was due to Google adding a smaller battery, it's worth noting that the 4,355 mAh battery is only slightly larger than the one in the newly released Galaxy S26. Samsung's entry-level flagship lasted 11 hours and 28 minutes in our battery test, and while that's far from impressive, it's still leagues ahead of what Google was doing just four years ago.</p><p>Obviously, the sheer difference between the Pixel 7 and the Pixel 10 series is down to the fact Google has made huge leaps and bounds in the battery life department. Gains were made with the release of the <a href="https://www.tomsguide.com/reviews/google-pixel-8-pro">Pixel 8</a> series, and we saw a huge increase in battery life with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Pixel 9</a> — with the momentum continuing until Pixel 10. </p><p>But those older phones were still released relatively recently, and memories of that battery life remain.</p><h2 id="battery-life-is-more-than-just-battery-capacity">Battery life is more than just battery capacity </h2><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="LaP2SfFpoeBnvnoqoNv8wS" name="android-phones charging" alt="Pixel 10 mPro charging wirelessly as Galaxy s25 plus charges via USB-C" src="https://cdn.mos.cms.futurecdn.net/LaP2SfFpoeBnvnoqoNv8wS.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's important to remember that, when it comes to battery life, the physical capacity is only part of the equation. The <a href="https://www.tomsguide.com/reviews/google-pixel-7-pro">Pixel 7 Pro's</a> 5,000 mAh battery and eight hours and three minutes of tested battery life is the perfect example of that in action.</p><p>A smartphone is effectively a jigsaw of various components working together, all drawing power from the same source. It only takes one or two of those components to get greedy before the battery life significantly worsens. Take the <a href="https://www.tomsguide.com/reviews/iphone-12">iPhone 12</a>, the first 5G phone Apple released, which recorded a battery life of eight hours and 25 minutes.</p><p>That's pretty poor, even for 2020, and it's a considerable decline compared to the <a href="https://www.tomsguide.com/reviews/iphone-11">iPhone 11's</a> 11 hours and 16 minutes. But, as we discovered in our testing, forcing the iPhone 12 to stick to a 4G connection saw that battery life increased to 10 hours and 23 minutes. It's still lower than the iPhone 11, but it proved that the 5G modem was using considerably more power than it should.</p><p>Pixel phones do not have a reputation for using the most energy-efficient components, and the modem has come under fire more than once. But things might be changing for the better, with Mystic Leaks claiming that Google will replace the power-hungry Exynos modems with a<a href="https://www.tomsguide.com/ai/google-to-remove-samsung-from-its-tensor-g6-modem-heres-why-that-matters"> more efficient MediaTek M90</a>. This was actually one of the first Pixel 11 rumors to surface, and they've stuck with that claim with the latest leak. </p><p>The leak also claims that Google will be building the<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades"> Tensor G6 chipset on a TSMC 2nm node</a>. That matters because the Tensor G5 was built on a TSMC 3nm node, and the G4 was built on a Samsung 4nm node. Smaller chips have greater transistor density, and this usually manifests in greater performance, power and energy efficiency.</p><p>So, regardless of the situation with the modem, the Tensor G6 might also offer some extra efficiency on its own. By how much isn't clear, but as we've seen with the likes of Apple's A-series chips, recent Snapdragon flagships and the<a href="https://www.tomsguide.com/computing/cpus/apples-m-series-chip-gamble-5-years-later-how-ditching-intel-revolutionized-computing-and-whats-next"> M-series chips on MacBooks</a>, the relative efficiency of the main chipset can make a huge amount of difference.</p><p>This means more efficient components could have a much greater positive impact on battery life than simply throwing extra capacity at the battery — assuming that Google doesn't mess it up somehow.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X8v0gW"></div>                            </div>                            <script src="https://kwizly.com/embed/X8v0gW.js" async></script><h2 id="bottom-line-5">Bottom line</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="TTBi82yPu8rL2RmVtf4om6" name="20260313_171508" alt="google pixel 10 pro images" src="https://cdn.mos.cms.futurecdn.net/TTBi82yPu8rL2RmVtf4om6.jpg" mos="" align="middle" fullscreen="" width="4000" height="2252" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>While I hope Google knows what it’s doing and won’t slip back into a laissez-faire attitude toward battery life, I can't help but worry that cutting capacity is the wrong move. That said, rumors of more efficient components offer some hope that Google is focusing on optimization elsewhere.<br><br>At the very least, Google needs to recognize that it's still lagging behind its biggest rivals. Energy efficiency is a huge part of that equation, but so is raw capacity. If nothing else, throwing a few extra milliamp-hours at the hardware certainly wouldn’t hurt.</p><p>However, we have to remember that this is all elementary until we can actually get ahold of the Pixel 11 series and test the battery for ourselves. That's the only way we'll find out whether Google has succeeded in maintaining its pro-battery trajectory, or if it's messed up so badly we have another Pixel 7 situation on our hands.</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/samsung-phones/i-lived-with-the-galaxy-z-flip-7-for-8-months-6-improvements-im-holding-out-for-with-the-galaxy-z-flip-8">I lived with the Galaxy Z Flip 7 for 8 months — 6 improvements I’m holding out for with the Galaxy Z Flip 8</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-fixed-my-iphone-hotspot-issues-with-these-5-simple-steps">I fixed my iPhone hotspot issues with these 5 simple steps</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-agrees-usd250m-settlement-over-siri-class-action-lawsuit-that-means-up-to-36m-iphone-users-could-be-eligible-for-a-pay-out-this-is-how-much-you-could-receive">Apple agrees $250m settlement over Siri class action lawsuit that means up to 36m iPhone users could be eligible for a pay-out — this is how much you could receive</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-battery-capacity-just-leaked-and-it-has-me-worried-about-googles-next-flagship</link>
                                                                            <description>
                            <![CDATA[ Pixel phones don't have a reputation for stellar battery life, so why is Google reducing capacity? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4GoEA9UWfbC8gfG4ETWHEE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/HSgQAVHzdXcymbvoVCYQRG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 07 May 2026 04:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/HSgQAVHzdXcymbvoVCYQRG-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 10 in the hand.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 10 in the hand.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 10 in the hand.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/HSgQAVHzdXcymbvoVCYQRG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google Pixel leaks are a very common occurrence, and the mass leaking of specs feels like it's been an annual tradition since the months running up to the launch of the <a href="https://www.tomsguide.com/us/google-pixel-3,review-5841.html">Pixel 3</a>. I have very mixed feelings about the fact that Google's mobile division is about as secure as a wet paper bag. <br><br>On the one hand, it's quite useful to have an idea of what's coming ahead of the big launch event, but I'm also fully aware that specs alone can be misleading — and could potentially cause issues. I say this because a boatload of <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series specs leaked earlier this week, including information about the batteries in all four devices.</p><p>Unfortunately, the news isn't good, leaving me worried that Google still isn't taking Pixel battery life seriously.</p><h2 id="the-state-of-pixel-11-batteries-as-we-currently-know-it">The state of Pixel 11 batteries (as we currently know it) </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5045px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5z8CCZZf9NKxxkckS7irYH" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/5z8CCZZf9NKxxkckS7irYH.jpg" mos="" align="middle" fullscreen="" width="5045" height="2838" 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>The leaked Pixel 11 specs came from a leaker who goes by the handle Mystic Leaks. They didn't reveal every last detail about the four phones, but the list does include battery capacities. While the figures themselves aren't too disappointing, they are all noticeably lower than those of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery capacity</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 (rumored)</strong></p></td><td  ><p>4,840 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10</strong></p></td><td  ><p>4,970 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro (rumored)</strong></p></td><td  ><p>4,707 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro</strong></p></td><td  ><p>4,870 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro XL (rumored)</strong></p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro XL</strong></p></td><td  ><p>5,200 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro Fold (rumored)</strong></p></td><td  ><p>4,658 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro Fold</strong></p></td><td  ><p>5,015 mAh</p></td></tr></tbody></table></div><p>Assuming these specs are correct, the Pixel 11 comes out the best with a loss of just 130 mAh of battery capacity, while the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro </a>ups that difference to 163 mAh. The 11 Pro XL loses 200 mAh, though it retains the respectable-sounding 5,000 mAh of capacity in the process. Sadly, the Pixel 11 Pro Fold comes out worst for wear, losing 357 mAh of battery. </p><p>Considering the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a> didn't have amazing battery life to begin with (12 hours and 13 minutes), that's likely going to have an impact on its daily lifespan.<br><br>I will point out that these figures are rather high for premium phones. The Pixel 11 Pro XL's 5,000 mAh cell is about standard for the largest flagship variants, but the entry-level model usually ends up with significantly lower battery capacity than its compatriots. The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> have 4,300 mAh and 3,692 mAh, respectively, which are peanuts compared to the Pixel 11's rumored 4,840 mAh. <br><br>In fact, it's almost unheard of for the entry-level phone to have a bigger battery than its Pro counterpart, but Google may be about to do it for two years in a row. What I mean is, compared to other popular phones, Pixel owners are eating pretty well in the battery department. </p><p>But that doesn't change the fact Google has a turbulent history with battery life, and the loss of any capacity is cause for concern.</p><h2 id="battery-life-has-been-a-recurring-problem-on-pixels">Battery life has been a recurring problem on Pixels </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4807px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9c3ueCk5mHTCmZ4EjpohUG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/9c3ueCk5mHTCmZ4EjpohUG.jpg" mos="" align="middle" fullscreen="" width="4807" height="2704" 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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery life (Hrs:Mins)</strong></p></td><td  ><p><strong>Battery Capacity (mAh)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10</strong></p></td><td  ><p>13:13</p></td><td  ><p>4,970</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro</strong></p></td><td  ><p>13:43</p></td><td  ><p>4,870</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro XL</strong></p></td><td  ><p>14:20</p></td><td  ><p>5,200</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 9</strong></p></td><td  ><p>12:30</p></td><td  ><p>4,700</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 9 Pro</strong></p></td><td  ><p>13:37</p></td><td  ><p>4,700</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 9 Pro XL</strong></p></td><td  ><p>14:37</p></td><td  ><p>5,050</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 8</strong></p></td><td  ><p>9:59</p></td><td  ><p>4,575 </p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 8 Pro</strong></p></td><td  ><p>10:03</p></td><td  ><p>5,050</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 7</strong></p></td><td  ><p>7:13</p></td><td  ><p>4,355</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 7 Pro</strong></p></td><td  ><p>8:03</p></td><td  ><p>5,000</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 6</strong></p></td><td  ><p>8:13</p></td><td  ><p>4,614</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 6 Pro</strong></p></td><td  ><p>7:55</p></td><td  ><p>5,000</p></td></tr></tbody></table></div><p>There's a reason why you've never seen a Pixel phone on our <a href="https://www.tomsguide.com/us/smartphones-best-battery-life,review-2857.html">best phone battery life</a> page: the battery life on Pixel phones used to be absolutely awful. Things have gotten a lot better in recent years, but even the best Pixel batteries can't seem to hold a candle to the likes of OnePlus, iPhone, or even certain Galaxy smartphones.</p><p>The Tom's Guide battery test involves setting a phone's display to 150 nits and running a custom script that forces a phone to continually surf the web over a 5G connection until the battery runs out. Out of all the phones we've tested, the longest lasting is the <a href="https://www.tomsguide.com/phones/oneplus-phones/oneplus-15-review">OnePlus 15</a>, which scored 25 hours and 13 minutes — a result that's aided by the phone's enormous 7,300 mAh silicon nanostack battery technology.</p><p>Meanwhile, the longest-lasting Pixel 10 series phone is the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL</a>, with the 5,200 mAh battery lasting 14 hours and 20 minutes. The worst result of the Pixel 10 series came from the Pixel 10 Pro Fold, which lasted 12 hours and 16 minutes before dying.</p><p>That's still a considerable improvement compared to the <a href="https://www.tomsguide.com/reviews/google-pixel-7">Pixel 7</a>, which only lasted 7 hours and 13 minutes when it was released in 2023. Before anyone suggests that this was due to Google adding a smaller battery, it's worth noting that the 4,355 mAh battery is only slightly larger than the one in the newly released Galaxy S26. Samsung's entry-level flagship lasted 11 hours and 28 minutes in our battery test, and while that's far from impressive, it's still leagues ahead of what Google was doing just four years ago.</p><p>Obviously, the sheer difference between the Pixel 7 and the Pixel 10 series is down to the fact Google has made huge leaps and bounds in the battery life department. Gains were made with the release of the <a href="https://www.tomsguide.com/reviews/google-pixel-8-pro">Pixel 8</a> series, and we saw a huge increase in battery life with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Pixel 9</a> — with the momentum continuing until Pixel 10. </p><p>But those older phones were still released relatively recently, and memories of that battery life remain.</p><h2 id="battery-life-is-more-than-just-battery-capacity">Battery life is more than just battery capacity </h2><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="LaP2SfFpoeBnvnoqoNv8wS" name="android-phones charging" alt="Pixel 10 mPro charging wirelessly as Galaxy s25 plus charges via USB-C" src="https://cdn.mos.cms.futurecdn.net/LaP2SfFpoeBnvnoqoNv8wS.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's important to remember that, when it comes to battery life, the physical capacity is only part of the equation. The <a href="https://www.tomsguide.com/reviews/google-pixel-7-pro">Pixel 7 Pro's</a> 5,000 mAh battery and eight hours and three minutes of tested battery life is the perfect example of that in action.</p><p>A smartphone is effectively a jigsaw of various components working together, all drawing power from the same source. It only takes one or two of those components to get greedy before the battery life significantly worsens. Take the <a href="https://www.tomsguide.com/reviews/iphone-12">iPhone 12</a>, the first 5G phone Apple released, which recorded a battery life of eight hours and 25 minutes.</p><p>That's pretty poor, even for 2020, and it's a considerable decline compared to the <a href="https://www.tomsguide.com/reviews/iphone-11">iPhone 11's</a> 11 hours and 16 minutes. But, as we discovered in our testing, forcing the iPhone 12 to stick to a 4G connection saw that battery life increased to 10 hours and 23 minutes. It's still lower than the iPhone 11, but it proved that the 5G modem was using considerably more power than it should.</p><p>Pixel phones do not have a reputation for using the most energy-efficient components, and the modem has come under fire more than once. But things might be changing for the better, with Mystic Leaks claiming that Google will replace the power-hungry Exynos modems with a<a href="https://www.tomsguide.com/ai/google-to-remove-samsung-from-its-tensor-g6-modem-heres-why-that-matters"> more efficient MediaTek M90</a>. This was actually one of the first Pixel 11 rumors to surface, and they've stuck with that claim with the latest leak. </p><p>The leak also claims that Google will be building the<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades"> Tensor G6 chipset on a TSMC 2nm node</a>. That matters because the Tensor G5 was built on a TSMC 3nm node, and the G4 was built on a Samsung 4nm node. Smaller chips have greater transistor density, and this usually manifests in greater performance, power and energy efficiency.</p><p>So, regardless of the situation with the modem, the Tensor G6 might also offer some extra efficiency on its own. By how much isn't clear, but as we've seen with the likes of Apple's A-series chips, recent Snapdragon flagships and the<a href="https://www.tomsguide.com/computing/cpus/apples-m-series-chip-gamble-5-years-later-how-ditching-intel-revolutionized-computing-and-whats-next"> M-series chips on MacBooks</a>, the relative efficiency of the main chipset can make a huge amount of difference.</p><p>This means more efficient components could have a much greater positive impact on battery life than simply throwing extra capacity at the battery — assuming that Google doesn't mess it up somehow.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X8v0gW"></div>                            </div>                            <script src="https://kwizly.com/embed/X8v0gW.js" async></script><h2 id="bottom-line-5">Bottom line</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="TTBi82yPu8rL2RmVtf4om6" name="20260313_171508" alt="google pixel 10 pro images" src="https://cdn.mos.cms.futurecdn.net/TTBi82yPu8rL2RmVtf4om6.jpg" mos="" align="middle" fullscreen="" width="4000" height="2252" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>While I hope Google knows what it’s doing and won’t slip back into a laissez-faire attitude toward battery life, I can't help but worry that cutting capacity is the wrong move. That said, rumors of more efficient components offer some hope that Google is focusing on optimization elsewhere.<br><br>At the very least, Google needs to recognize that it's still lagging behind its biggest rivals. Energy efficiency is a huge part of that equation, but so is raw capacity. If nothing else, throwing a few extra milliamp-hours at the hardware certainly wouldn’t hurt.</p><p>However, we have to remember that this is all elementary until we can actually get ahold of the Pixel 11 series and test the battery for ourselves. That's the only way we'll find out whether Google has succeeded in maintaining its pro-battery trajectory, or if it's messed up so badly we have another Pixel 7 situation on our hands.</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/samsung-phones/i-lived-with-the-galaxy-z-flip-7-for-8-months-6-improvements-im-holding-out-for-with-the-galaxy-z-flip-8">I lived with the Galaxy Z Flip 7 for 8 months — 6 improvements I’m holding out for with the Galaxy Z Flip 8</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-fixed-my-iphone-hotspot-issues-with-these-5-simple-steps">I fixed my iPhone hotspot issues with these 5 simple steps</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-agrees-usd250m-settlement-over-siri-class-action-lawsuit-that-means-up-to-36m-iphone-users-could-be-eligible-for-a-pay-out-this-is-how-much-you-could-receive">Apple agrees $250m settlement over Siri class action lawsuit that means up to 36m iPhone users could be eligible for a pay-out — this is how much you could receive</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Pixel 11 specs leak reveals what upgrades to expect — and some concerning downgrades ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It's rare for us to go into a Google Pixel launch event without knowing pretty much everything the upcoming phones will have to offer. The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> launch may still be a few months away, but it seems that this year will be no exception to that trend now that tipster <a href="https://t.me/mysticleaks/163" target="_blank">Mystic Leaks</a> has posted a full list of specs for the upcoming phones.</p><p>As expected, Mystic Leaks has specs for four separate Pixel 11 models: The standard Pixel 11, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro,</a> a larger Pixel 11 Pro XL and the Pixel 11 Pro Fold. According to these leaked specs, all four will come with a Tensor G6 chipset, built on TSMC's 2nm node. Mystic Leaks seems to corroborate past rumors, claiming that the chip will feature seven cores instead of the usual eight: A single ARM C1-Ultra core (4.11 GHz), four ARM C1-Pro cores (3.38 GHz) and two ARM C1-Pro cores (2.65 GHz).</p><p>Each phone is also said to come with a <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Titan M3 security chip</a>, an aged PowerVR C-Series CXTP-48-1536 from 2021 and a MediaTek M90 modem. They will also include a new "Tensor Processing Unit," Google's name for its own neural processing units, and a new GXP image signal processor. </p><p>Mystic Leaks also claims that the Pro models will ditch the thermometer this year, which is making room for the rumored Pixel Glow RGB LED array. He also says that Project Toscana, which was developed as a Face ID-style infra-red facial recognition, isn't ready and won't be arriving this year.</p><h2 id="pixel-11-series-leaked-specs-what-we-know">Pixel 11 series leaked specs — what we know</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7sZnUxtk8wYDiSM87VdfrG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/7sZnUxtk8wYDiSM87VdfrG.jpg" mos="" align="middle" fullscreen="" width="5328" height="2997" 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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Pixel 11</strong></p></td><td  ><p><strong>Pixel 11 Pro</strong></p></td><td  ><p><strong>Pixel 11 Pro XL</strong></p></td><td  ><p><strong>Pixel 11 Pro Fold</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3" OLED, 1080×2424</p></td><td  ><p> 6.3" OLED, 1280×2856</p></td><td  ><p> 6.8" OLED, 1344×2992</p></td><td  ><p> 2076×2160 OLED, (Internal), 1080×2342 OLED (Cover)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>60-120Hz</p></td><td  ><p>1-120Hz</p></td><td  ><p>1-120Hz</p></td><td  ><p>1-120Hz (Internal), 60-120Hz (Cover)</p></td></tr><tr><td class="firstcol " ><p><strong>Display Brightness (nits)</strong></p></td><td  ><p>2,000 (HDR / 3,100 (Peak)</p></td><td  ><p>2,450 (HDR), 3,600 (Peak)</p></td><td  ><p>2,450 (HDR), 3,600 (Peak)</p></td><td  ><p>Internal: 2,050 (HDR), 3,500 (Peak)<br>Cover: 2,450 (HDR), 3,600 (peak)</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8 / 12GB</p></td><td  ><p>12 / 16GB</p></td><td  ><p>12 ./ 16GB</p></td><td  ><p>12 / 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,840 mAh</p></td><td  ><p>4,707 mAh</p></td><td  ><p>5,000 mAh</p></td><td  ><p>4,658 mAh</p></td></tr></tbody></table></div><p>The standard Pixel 11 is listed as coming with a 6.3-inch OLED display, with 1080 x 2424 resolution, a 60-120Hz refresh rate, 2,000 nit brightness and 3,100 nits of peak screen brightness. That's mostly the same as last year, with an additional 100 nits of peak screen illumination. </p><p>Other specs include a 4,840 mAh battery, which is smaller than the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10's</a> 4,970 mAh, 8/12GB of RAM, and a brand-new main camera. Details on that camera aren't disclosed, but Mystic Leaks speculates that it could be 50MP.</p><p>The Pixel 11 Pro is said to come with a 6.3-inch OLED display with 1280 x 2856 resolution, a 1-120Hz refresh rate, and 2,450 nits of brightness, which increases to 3,600 nits at its peak. The Pixel 11 Pro is the same, with a larger 6.8-inch 1344 x 2992 resolution. If these specs are accurate, it means both phones get a minor bump to screen brightness compared to last year.</p><p>Both phones are also expected to come with either 12 or 16GB of RAM, new main and telephoto camera lenses, and a small downgrade in battery capacity. The Pixel 11 Pro is listed as having 4,707 mAh, and the Pixel 11 Pro XL supposedly has 5,000 mAh. That's decreased from 4,870 mAh and 5,200 mAh, respectively.</p><p>The Pixel 11 Pro Fold's screen size isn't listed, but it is claimed to have a 2076 x 2160 foldable display and a 1080 x 2342 cover display. There's a width variation of a few pixels on both screens, with the foldable display measuring slightly wider than the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold's</a>, while the cover display is slightly narrower. This shouldn't make a huge amount of visible difference, though, and bezel size is likely the cause of the variation.</p><p>Brightness is rated for 2,050 nits (3,500 peak) on the foldable display and 2,450 (3,600 peak) on the cover display. Mystic Leaks claims that there's a new camera on the way, a choice of 12 or 16GB of RAM and a 4,658 mAh battery. That's considerably lower than the 5,015 mAh battery in the Pixel 10 Pro Fold.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Oan3wX"></div>                            </div>                            <script src="https://kwizly.com/embed/Oan3wX.js" async></script><h2 id="pixel-11-specs-leak-our-thoughts">Pixel 11 specs leak — our thoughts</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4219px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="f3qzdjEbWUCwFJzwBaRTeG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/f3qzdjEbWUCwFJzwBaRTeG.jpg" mos="" align="middle" fullscreen="" width="4219" height="2373" 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>When it comes to leaked specs you have to err on the side of caution, because there's no telling how accurate they might be. That said, there's nothing particularly out of the ordinary with what's listed here, with the leak offering a fairly reasonable number of upgrades — including screen brightness and brand new camera lenses.</p><p>The various claimed downgrades have given me some pause for thought, however. The obvious one is that claims of RAM reduction, and if this proves accurate, my guess is that lower-storage variants will have to deal with the memory downgrade. In the face of RAMageddon and the <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">skyrocketing cost of memory</a>, this isn't really a huge surprise.</p><p>Dropping the Tensor G6 to six cores, instead of the usual eight, also seems like a downgrade. But it's worth noting that the seven cores listed offer faster clock speed than their Tensor G5 equivalents. That chip had a single 3.78GHz core, five 3.05 GHz cores and two 2.25 GHz cores. How much of an impact this change will have on performance isn't clear, and we won't know for sure until the phone undergoes some thorough testing.</p><p>Sadly, the inclusion of the CXTP-48-1536 GPU doesn't fill me with confidence. Rumors have pointed to this GPU before, and the fact that it was first released back in 2021 makes it positively ancient by computing standards — and hardly the kind of tech you'd expect in a premium flagship. </p><p>The loss of battery capacity is also pretty worrying, especially given Google's poor track record with battery life. Things have been improving over recent generations, but the Pixel still lagged quite far behind all the other phones with <a href="https://www.tomsguide.com/us/smartphones-best-battery-life,review-2857.html">the best battery life</a>. While there's still a very good chance that Google will make up for the loss with better power efficiency, especially with a 2nm chipset, I'm going to have to see some valid results before my mind is put at ease.</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/its-about-time-leaked-iphone-18-pro-images-show-off-shrinking-dynamic-island">It's about time: Leaked iPhone 18 Pro images show off shrinking Dynamic Island</a></li><li><a href="https://www.tomsguide.com/phones/i-swapped-my-galaxy-s26-for-this-blackberry-clone-with-a-physical-keyboard-for-a-week-and-im-honestly-embarrassed-by-how-much-i-like-it">I swapped my Galaxy S26 for this BlackBerry clone with a physical keyboard for a week — and I’m honestly embarrassed by how much I like it</a></li><li><a href="https://www.tomsguide.com/phones/iphones/im-stoked-for-the-iphone-fold-but-theres-something-else-that-should-be-a-much-higher-priority-than-a-thin-design">I want a thin iPhone Fold, but I won't buy it unless Apple finally fixes multitasking in iOS</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades</link>
                                                                            <description>
                            <![CDATA[ Pixel 11 specs have now leaked, and there's a lot to digest — including some surprise downgrades ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nkaBj4gtSiAAN5AwgETarh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QDzBjHRegArpD2NDJeTRSG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 05 May 2026 10:54:42 +0000</pubDate>                                                                                                                                <updated>Tue, 05 May 2026 11:16:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/QDzBjHRegArpD2NDJeTRSG-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 10 in the hand.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 10 in the hand.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 10 in the hand.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QDzBjHRegArpD2NDJeTRSG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's rare for us to go into a Google Pixel launch event without knowing pretty much everything the upcoming phones will have to offer. The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> launch may still be a few months away, but it seems that this year will be no exception to that trend now that tipster <a href="https://t.me/mysticleaks/163" target="_blank">Mystic Leaks</a> has posted a full list of specs for the upcoming phones.</p><p>As expected, Mystic Leaks has specs for four separate Pixel 11 models: The standard Pixel 11, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro,</a> a larger Pixel 11 Pro XL and the Pixel 11 Pro Fold. According to these leaked specs, all four will come with a Tensor G6 chipset, built on TSMC's 2nm node. Mystic Leaks seems to corroborate past rumors, claiming that the chip will feature seven cores instead of the usual eight: A single ARM C1-Ultra core (4.11 GHz), four ARM C1-Pro cores (3.38 GHz) and two ARM C1-Pro cores (2.65 GHz).</p><p>Each phone is also said to come with a <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Titan M3 security chip</a>, an aged PowerVR C-Series CXTP-48-1536 from 2021 and a MediaTek M90 modem. They will also include a new "Tensor Processing Unit," Google's name for its own neural processing units, and a new GXP image signal processor. </p><p>Mystic Leaks also claims that the Pro models will ditch the thermometer this year, which is making room for the rumored Pixel Glow RGB LED array. He also says that Project Toscana, which was developed as a Face ID-style infra-red facial recognition, isn't ready and won't be arriving this year.</p><h2 id="pixel-11-series-leaked-specs-what-we-know">Pixel 11 series leaked specs — what we know</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7sZnUxtk8wYDiSM87VdfrG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/7sZnUxtk8wYDiSM87VdfrG.jpg" mos="" align="middle" fullscreen="" width="5328" height="2997" 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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Pixel 11</strong></p></td><td  ><p><strong>Pixel 11 Pro</strong></p></td><td  ><p><strong>Pixel 11 Pro XL</strong></p></td><td  ><p><strong>Pixel 11 Pro Fold</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3" OLED, 1080×2424</p></td><td  ><p> 6.3" OLED, 1280×2856</p></td><td  ><p> 6.8" OLED, 1344×2992</p></td><td  ><p> 2076×2160 OLED, (Internal), 1080×2342 OLED (Cover)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>60-120Hz</p></td><td  ><p>1-120Hz</p></td><td  ><p>1-120Hz</p></td><td  ><p>1-120Hz (Internal), 60-120Hz (Cover)</p></td></tr><tr><td class="firstcol " ><p><strong>Display Brightness (nits)</strong></p></td><td  ><p>2,000 (HDR / 3,100 (Peak)</p></td><td  ><p>2,450 (HDR), 3,600 (Peak)</p></td><td  ><p>2,450 (HDR), 3,600 (Peak)</p></td><td  ><p>Internal: 2,050 (HDR), 3,500 (Peak)<br>Cover: 2,450 (HDR), 3,600 (peak)</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8 / 12GB</p></td><td  ><p>12 / 16GB</p></td><td  ><p>12 ./ 16GB</p></td><td  ><p>12 / 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G6</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,840 mAh</p></td><td  ><p>4,707 mAh</p></td><td  ><p>5,000 mAh</p></td><td  ><p>4,658 mAh</p></td></tr></tbody></table></div><p>The standard Pixel 11 is listed as coming with a 6.3-inch OLED display, with 1080 x 2424 resolution, a 60-120Hz refresh rate, 2,000 nit brightness and 3,100 nits of peak screen brightness. That's mostly the same as last year, with an additional 100 nits of peak screen illumination. </p><p>Other specs include a 4,840 mAh battery, which is smaller than the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10's</a> 4,970 mAh, 8/12GB of RAM, and a brand-new main camera. Details on that camera aren't disclosed, but Mystic Leaks speculates that it could be 50MP.</p><p>The Pixel 11 Pro is said to come with a 6.3-inch OLED display with 1280 x 2856 resolution, a 1-120Hz refresh rate, and 2,450 nits of brightness, which increases to 3,600 nits at its peak. The Pixel 11 Pro is the same, with a larger 6.8-inch 1344 x 2992 resolution. If these specs are accurate, it means both phones get a minor bump to screen brightness compared to last year.</p><p>Both phones are also expected to come with either 12 or 16GB of RAM, new main and telephoto camera lenses, and a small downgrade in battery capacity. The Pixel 11 Pro is listed as having 4,707 mAh, and the Pixel 11 Pro XL supposedly has 5,000 mAh. That's decreased from 4,870 mAh and 5,200 mAh, respectively.</p><p>The Pixel 11 Pro Fold's screen size isn't listed, but it is claimed to have a 2076 x 2160 foldable display and a 1080 x 2342 cover display. There's a width variation of a few pixels on both screens, with the foldable display measuring slightly wider than the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold's</a>, while the cover display is slightly narrower. This shouldn't make a huge amount of visible difference, though, and bezel size is likely the cause of the variation.</p><p>Brightness is rated for 2,050 nits (3,500 peak) on the foldable display and 2,450 (3,600 peak) on the cover display. Mystic Leaks claims that there's a new camera on the way, a choice of 12 or 16GB of RAM and a 4,658 mAh battery. That's considerably lower than the 5,015 mAh battery in the Pixel 10 Pro Fold.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Oan3wX"></div>                            </div>                            <script src="https://kwizly.com/embed/Oan3wX.js" async></script><h2 id="pixel-11-specs-leak-our-thoughts">Pixel 11 specs leak — our thoughts</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4219px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="f3qzdjEbWUCwFJzwBaRTeG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/f3qzdjEbWUCwFJzwBaRTeG.jpg" mos="" align="middle" fullscreen="" width="4219" height="2373" 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>When it comes to leaked specs you have to err on the side of caution, because there's no telling how accurate they might be. That said, there's nothing particularly out of the ordinary with what's listed here, with the leak offering a fairly reasonable number of upgrades — including screen brightness and brand new camera lenses.</p><p>The various claimed downgrades have given me some pause for thought, however. The obvious one is that claims of RAM reduction, and if this proves accurate, my guess is that lower-storage variants will have to deal with the memory downgrade. In the face of RAMageddon and the <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">skyrocketing cost of memory</a>, this isn't really a huge surprise.</p><p>Dropping the Tensor G6 to six cores, instead of the usual eight, also seems like a downgrade. But it's worth noting that the seven cores listed offer faster clock speed than their Tensor G5 equivalents. That chip had a single 3.78GHz core, five 3.05 GHz cores and two 2.25 GHz cores. How much of an impact this change will have on performance isn't clear, and we won't know for sure until the phone undergoes some thorough testing.</p><p>Sadly, the inclusion of the CXTP-48-1536 GPU doesn't fill me with confidence. Rumors have pointed to this GPU before, and the fact that it was first released back in 2021 makes it positively ancient by computing standards — and hardly the kind of tech you'd expect in a premium flagship. </p><p>The loss of battery capacity is also pretty worrying, especially given Google's poor track record with battery life. Things have been improving over recent generations, but the Pixel still lagged quite far behind all the other phones with <a href="https://www.tomsguide.com/us/smartphones-best-battery-life,review-2857.html">the best battery life</a>. While there's still a very good chance that Google will make up for the loss with better power efficiency, especially with a 2nm chipset, I'm going to have to see some valid results before my mind is put at ease.</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/its-about-time-leaked-iphone-18-pro-images-show-off-shrinking-dynamic-island">It's about time: Leaked iPhone 18 Pro images show off shrinking Dynamic Island</a></li><li><a href="https://www.tomsguide.com/phones/i-swapped-my-galaxy-s26-for-this-blackberry-clone-with-a-physical-keyboard-for-a-week-and-im-honestly-embarrassed-by-how-much-i-like-it">I swapped my Galaxy S26 for this BlackBerry clone with a physical keyboard for a week — and I’m honestly embarrassed by how much I like it</a></li><li><a href="https://www.tomsguide.com/phones/iphones/im-stoked-for-the-iphone-fold-but-theres-something-else-that-should-be-a-much-higher-priority-than-a-thin-design">I want a thin iPhone Fold, but I won't buy it unless Apple finally fixes multitasking in iOS</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 — everything we know so far ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google Pixel phones are among the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phones</a> you can buy, and showcase how much Android is capable of — in terms of both hardware and software. It's the closest thing we have to a Google-made iPhone, and the Google Pixel 11 is likely to be no exception to that when it arrives later this year.</p><p>The pressure is on for Google after offering a very mixed set of upgrades with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series. The Pixel 10 itself was leaps and bounds ahead of the Pixel 9, thanks to a bunch of Pro-level hardware, but the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro </a>was barely a step up from its predecessor. Google needs to make sure not to fall into that trap with the Pixel 11, and offer something substantial, even if it isn't groundbreaking.</p><p>Whether it will succeed or not is another matter, and we're not likely to find out until the launch event this summer. Until then, here's everything we know about Pixel 11 so far.</p><h3 class="article-body__section" id="section-google-pixel-11-rumored-specs"><span>Google Pixel 11: Rumored specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Pixel 11</strong></p></td><td  ><p><strong>Pixel 10</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3" OLED, 1080×2424</p></td><td  ><p>6.3" OLED, 1080×2424</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>60-120Hz</p></td><td  ><p>60-120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Display Brightness (nits)</strong></p></td><td  ><p>2,000 (HDR / 3,100 (Peak)</p></td><td  ><p>2,000 (HDR / 3,000 (Peak)</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8 / 12GB</p></td><td  ><p>12GB</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G5</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,840 mAh</p></td><td  ><p>4,970 mAh</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-google-pixel-11-rumored-release-date-price"><span>Google Pixel 11: Rumored release date & price</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4807px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9c3ueCk5mHTCmZ4EjpohUG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/9c3ueCk5mHTCmZ4EjpohUG.jpg" mos="" align="middle" fullscreen="" width="4807" height="2704" 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>Following two consecutive years of August Pixel releases, Google will likely stick to that timeline once again. Late August is that perfect sweet spot between the release of <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-8-how-samsungs-next-foldable-could-square-up-with-the-iphone-fold">Galaxy Z Fold 8 </a>and <a href="https://www.tomsguide.com/phones/iphones/iphone-18-rumors-everything-we-know-so-far">iPhone 18</a>, which makes it the perfect time to launch a brand new Pixel phone.</p><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Pixel 9</a> was released on August 22, while the Pixel 10 arrived a little later on August 29, so we should probably expect something in the last week of the month.</p><p>Pricing is still a huge unknown at this point, but it's possible that we'll see some kind of price increase. Not only has the cost of RAM and storage gone through the roof, but I'd also be surprised (and disappointed) if we didn't see the base storage increase from 128GB to 256GB. </p><p>Google already did it with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL</a> last year, and the change is long overdue, especially after Apple decided to make 256GB storage standard on every<a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review"> iPhone 17</a> model. Unfortunately, I don't see that change happening without some sort of price increase to go with it.</p><h3 class="article-body__section" id="section-google-pixel-11-design-display"><span>Google Pixel 11: Design & Display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5045px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5z8CCZZf9NKxxkckS7irYH" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/5z8CCZZf9NKxxkckS7irYH.jpg" mos="" align="middle" fullscreen="" width="5045" height="2838" 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>We're not expecting major design changes with the Pixel 11 this year, and leaked CAD renders from <a href="https://x.com/OnLeaks/status/2038622813645377574" target="_blank">OnLeaks</a> suggest that the basic design will remain the same for the next year. However, there appear to be a few small changes, including slimmer bezels and an all-glass camera bar.</p><p>According to <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">leaked specs from Mystic Leaks</a>, the phone will have a 6.3-inch OLED display with 1080 x 2424 resolution and 60-120Hz refresh rate, which is the same as the Pixel 10. Display brightness may get a small boost, with the leak suggesting that, while HDR brightness is limited to 2,000 nits again, the peak brightness may 3,100 — 100 nits more than last year.</p><p>Google has previously said that Pixel phones will undergo a redesign<a href="https://www.bloomberg.com/news/features/2025-08-21/google-pixel-10-future-of-pixel-google-glasses-interview-with-rick-osterloh"> every two to three years</a>. While those renders suggest there are no major changes, other rumors claim that Google will add a new feature called "<a href="https://www.androidauthority.com/google-pixel-glow-lights-3661797/" target="_blank">Pixel Glow</a>," which is expected to be similar to Nothing's Glyph lights. The feature has shown up in code from the Android 17 beta, but other than the name, we don't know a great deal about it.</p><h3 class="article-body__section" id="section-google-pixel-11-cameras"><span>Google Pixel 11: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7sZnUxtk8wYDiSM87VdfrG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/7sZnUxtk8wYDiSM87VdfrG.jpg" mos="" align="middle" fullscreen="" width="5328" height="2997" 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>There haven't been any leaks about the Pixel 11's camera upgrades, and following the addition of a telephoto lens on the Pixel 10 I wouldn't have expected any major upgrades. But a new specs leak claims that all four Pixel 11 phones will get a new main camera lens — <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">possibly one with 50MP resolution.</a></p><p>Further details are unknown, but it seems that the standard model will miss out on the telephoto lens upgrade rumored to be coming to Pixel 11 Pro and Pixel 11 Pro XL</p><p>That said, there's a lot more to camera performance than hardware specs, and there's a very good chance that Google will include a bunch of camera features and upgrades — enhanced by the Tensor G6 chipset. </p><p>It's currently unclear what those features might be, but there is speculation that Google could include a <a href="https://www.androidauthority.com/google-project-toscana-3641601/" target="_blank">new infrared under-display camera</a> to power an advanced facial recognition system similar to Apple's Face ID. However, a more recent leak suggests that this system <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">isn't ready to be included on Pixel 11</a>.</p><p>Google has attempted such a thing before, notably on <a href="https://www.tomsguide.com/reviews/pixel-4">Pixel 4</a>, but this would be the first time it included an iPhone-style infrared camera. That should offer better security than camera-based face unlock systems, but we'll have to wait and see how such a feature would hold up to scrutiny.</p><h3 class="article-body__section" id="section-google-pixel-11-performance"><span>Google Pixel 11: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4219px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="f3qzdjEbWUCwFJzwBaRTeG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/f3qzdjEbWUCwFJzwBaRTeG.jpg" mos="" align="middle" fullscreen="" width="4219" height="2373" 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>Pixel chips are not known for being particularly powerful, and the Tensor chips haven't really made much headway in that department. Google may say that they're better suited for AI processing and other software enhancements, but it doesn't change the fact that Pixel phones have been lagging as a result of Tensor's weak performance.</p><p>Sadly, the Tensor G6 isn't expected to make many improvements, especially in the graphics department. According to leaker <a href="https://t.me/mysticleaks/161?comment=48458" target="_blank">Mystic Leaks</a>, the Tensor G6 will utilize a Power VR CXTP-48-1536 GPU — which first released back in 2021. That's right, Google could be using a five-year-old graphics processor in the Pixel 11, and that doesn't bode well for its performance. </p><p>The good news is that the same leak suggests the G6 chip will use a 4.11 GHz Arm C1 Ultra core, which is the best core Arm produces — and bodes well for computational performance at the very least. It will be joined by four C1 Pro cores running at 3.38 GHz and two slightly slower C1 Pro cores that clock in at 2.65 GHz. However, the leak suggests that the G6 will also drop to seven cores, compared to the eight-core CPU in the Tensor G5.</p><p><a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">A newer leak</a> also promises that the chip will be made with TSMC's 2nm node, which should offer better performance and energy efficiency than a 3nm chip. Though we won't know exactly how much of an improvement is on the way.</p><p>It's also a possibility that Google may reduce the amount of RAM, likely due to the ongoing AI-induced memory shortages. Mystic Leaks suggests that Google may offer an 8GB memory option, but didn't elaborate on which Pixel 11 variants may offer it instead of the usual 12GB. My guess is that it would be certain lower storage variants, since that's what the likes of Samsung does, but we don't know that for sure right now.</p><h3 class="article-body__section" id="section-google-pixel-11-battery-charging"><span>Google Pixel 11: Battery & charging</span></h3><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="m8GjKjwhaj3zaCDCMpToFo" name="Pixelsnap accessories" alt="Pixelsnap accessories on Pixel 10." src="https://cdn.mos.cms.futurecdn.net/m8GjKjwhaj3zaCDCMpToFo.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>We haven't heard anything about the Pixel 11's battery just yet, but I wouldn't hold my breath for any major changes this year. — especially where battery capacity is concerned. Since the Pixel 10 already offers a substantial 4,970 mAh of power, there isn't a lot of room for the Pixel 11 to add more.</p><p>Unfortunately,<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades"> recent leaks suggest</a> that the capacity will actually be reduced to 4,840 mAh. While it's not a huge loss of capacity, it would be disappointing to see a company with such a poor reputation for battery life deliberately hinder its newest devices. </p><p>Pixel battery life has improved over the past few years, but it's still quite far behind the likes of Apple and OnePlus. With the lower capacity in mind, we'd like to see some improvements to efficiency and better overall battery life as a result, even if the battery itself doesn't change that much.</p><p>Of course, we did see some major charging upgrades on the Pixel 10 Pro XL last year, with 45W wired charging and 25W Qi2 wireless charging. It would be nice to see some of those speeds make their way to smaller models, including Pixel 11 and Pixel 11 Pro. We also expect that Google will keep Qi2 charging, with <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixelsnap-is-the-pixel-10-upgrade-everyone-should-be-the-most-excited-about-heres-why">Pixelsnap's </a>magnetic connectivity around for the foreseeable future. </p><h3 class="article-body__section" id="section-google-pixel-11-outlook"><span>Google Pixel 11: Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3915px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gXEwy8xXFZoFFZ2jWe2DBG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/gXEwy8xXFZoFFZ2jWe2DBG.jpg" mos="" align="middle" fullscreen="" width="3915" height="2202" 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>There are still a lot of unknowns where the Pixel 11 is concerned, which is actually quite surprising. Google is not known for keeping on top of leaks, and, rarely, we don't know everything about the newest Pixel before it actually launches. There's still time, though, and we're likely to hear something before the launch date rolls around.</p><p>We're not expecting a major upgrade this year, and while disappointing, that's to be expected considering the sheer amount of changes made to the Pixel 10. Of course, some of what we have heard does sound promising in certain areas, but the rumored downgrades may make this another unimpressive release by Google. I just hope that the Pixel 11 will be a little more impressive than these early leaks have let on.</p><p>We'll just have to wait and see what leaks in the coming months before we make up our mind, and failing that, see what Google has in store at the launch event. Hopefully, Jimmy Fallon isn't there 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/phones/samsung-phones/the-samsung-galaxy-s27-ultra-could-ditch-the-redundant-3x-zoom-for-this-much-bigger-camera-upgrade">The Samsung Galaxy S27 Ultra could ditch the 'redundant' 3x zoom for this much bigger camera upgrade</a></li><li><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">Apple confirms 'significantly higher memory costs' and that means iPhone a</a><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">nd Mac price hikes are almost certainly on the way</a></li><li><a href="https://www.tomsguide.com/phones/motorola-phones/we-just-saw-the-new-motorola-razr-2026-lineup-and-the-one-we-love-most-will-actually-surprise-you">We just went hands-on with the new Motorola Razr 2026 family, and this is the one I'd buy</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far</link>
                                                                            <description>
                            <![CDATA[ Google Pixel 11 is coming later this year, and this is what we know about the upcoming flagship. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">9Xq9iCa8FpmJgPzYpUuoNN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MYbp7CtVWo8eExPhbWpKcG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 04 May 2026 05:45:00 +0000</pubDate>                                                                                                                                <updated>Tue, 05 May 2026 11:18:42 +0000</updated>
                                                                                                                                            <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></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/MYbp7CtVWo8eExPhbWpKcG-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 10 in the hand.]]></media:description>                                                            <media:text><![CDATA[Google Pixel 10 in the hand.]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 10 in the hand.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MYbp7CtVWo8eExPhbWpKcG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google Pixel phones are among the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phones</a> you can buy, and showcase how much Android is capable of — in terms of both hardware and software. It's the closest thing we have to a Google-made iPhone, and the Google Pixel 11 is likely to be no exception to that when it arrives later this year.</p><p>The pressure is on for Google after offering a very mixed set of upgrades with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> series. The Pixel 10 itself was leaps and bounds ahead of the Pixel 9, thanks to a bunch of Pro-level hardware, but the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-review-a-great-phone-but-it-doesnt-feel-like-much-of-an-upgrade">Pixel 10 Pro </a>was barely a step up from its predecessor. Google needs to make sure not to fall into that trap with the Pixel 11, and offer something substantial, even if it isn't groundbreaking.</p><p>Whether it will succeed or not is another matter, and we're not likely to find out until the launch event this summer. Until then, here's everything we know about Pixel 11 so far.</p><h3 class="article-body__section" id="section-google-pixel-11-rumored-specs"><span>Google Pixel 11: Rumored specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Pixel 11</strong></p></td><td  ><p><strong>Pixel 10</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.3" OLED, 1080×2424</p></td><td  ><p>6.3" OLED, 1080×2424</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>60-120Hz</p></td><td  ><p>60-120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Display Brightness (nits)</strong></p></td><td  ><p>2,000 (HDR / 3,100 (Peak)</p></td><td  ><p>2,000 (HDR / 3,000 (Peak)</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8 / 12GB</p></td><td  ><p>12GB</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Tensor G5</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,840 mAh</p></td><td  ><p>4,970 mAh</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-google-pixel-11-rumored-release-date-price"><span>Google Pixel 11: Rumored release date & price</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4807px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9c3ueCk5mHTCmZ4EjpohUG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/9c3ueCk5mHTCmZ4EjpohUG.jpg" mos="" align="middle" fullscreen="" width="4807" height="2704" 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>Following two consecutive years of August Pixel releases, Google will likely stick to that timeline once again. Late August is that perfect sweet spot between the release of <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-8-how-samsungs-next-foldable-could-square-up-with-the-iphone-fold">Galaxy Z Fold 8 </a>and <a href="https://www.tomsguide.com/phones/iphones/iphone-18-rumors-everything-we-know-so-far">iPhone 18</a>, which makes it the perfect time to launch a brand new Pixel phone.</p><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Pixel 9</a> was released on August 22, while the Pixel 10 arrived a little later on August 29, so we should probably expect something in the last week of the month.</p><p>Pricing is still a huge unknown at this point, but it's possible that we'll see some kind of price increase. Not only has the cost of RAM and storage gone through the roof, but I'd also be surprised (and disappointed) if we didn't see the base storage increase from 128GB to 256GB. </p><p>Google already did it with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL</a> last year, and the change is long overdue, especially after Apple decided to make 256GB storage standard on every<a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review"> iPhone 17</a> model. Unfortunately, I don't see that change happening without some sort of price increase to go with it.</p><h3 class="article-body__section" id="section-google-pixel-11-design-display"><span>Google Pixel 11: Design & Display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5045px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5z8CCZZf9NKxxkckS7irYH" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/5z8CCZZf9NKxxkckS7irYH.jpg" mos="" align="middle" fullscreen="" width="5045" height="2838" 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>We're not expecting major design changes with the Pixel 11 this year, and leaked CAD renders from <a href="https://x.com/OnLeaks/status/2038622813645377574" target="_blank">OnLeaks</a> suggest that the basic design will remain the same for the next year. However, there appear to be a few small changes, including slimmer bezels and an all-glass camera bar.</p><p>According to <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">leaked specs from Mystic Leaks</a>, the phone will have a 6.3-inch OLED display with 1080 x 2424 resolution and 60-120Hz refresh rate, which is the same as the Pixel 10. Display brightness may get a small boost, with the leak suggesting that, while HDR brightness is limited to 2,000 nits again, the peak brightness may 3,100 — 100 nits more than last year.</p><p>Google has previously said that Pixel phones will undergo a redesign<a href="https://www.bloomberg.com/news/features/2025-08-21/google-pixel-10-future-of-pixel-google-glasses-interview-with-rick-osterloh"> every two to three years</a>. While those renders suggest there are no major changes, other rumors claim that Google will add a new feature called "<a href="https://www.androidauthority.com/google-pixel-glow-lights-3661797/" target="_blank">Pixel Glow</a>," which is expected to be similar to Nothing's Glyph lights. The feature has shown up in code from the Android 17 beta, but other than the name, we don't know a great deal about it.</p><h3 class="article-body__section" id="section-google-pixel-11-cameras"><span>Google Pixel 11: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7sZnUxtk8wYDiSM87VdfrG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/7sZnUxtk8wYDiSM87VdfrG.jpg" mos="" align="middle" fullscreen="" width="5328" height="2997" 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>There haven't been any leaks about the Pixel 11's camera upgrades, and following the addition of a telephoto lens on the Pixel 10 I wouldn't have expected any major upgrades. But a new specs leak claims that all four Pixel 11 phones will get a new main camera lens — <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">possibly one with 50MP resolution.</a></p><p>Further details are unknown, but it seems that the standard model will miss out on the telephoto lens upgrade rumored to be coming to Pixel 11 Pro and Pixel 11 Pro XL</p><p>That said, there's a lot more to camera performance than hardware specs, and there's a very good chance that Google will include a bunch of camera features and upgrades — enhanced by the Tensor G6 chipset. </p><p>It's currently unclear what those features might be, but there is speculation that Google could include a <a href="https://www.androidauthority.com/google-project-toscana-3641601/" target="_blank">new infrared under-display camera</a> to power an advanced facial recognition system similar to Apple's Face ID. However, a more recent leak suggests that this system <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">isn't ready to be included on Pixel 11</a>.</p><p>Google has attempted such a thing before, notably on <a href="https://www.tomsguide.com/reviews/pixel-4">Pixel 4</a>, but this would be the first time it included an iPhone-style infrared camera. That should offer better security than camera-based face unlock systems, but we'll have to wait and see how such a feature would hold up to scrutiny.</p><h3 class="article-body__section" id="section-google-pixel-11-performance"><span>Google Pixel 11: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4219px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="f3qzdjEbWUCwFJzwBaRTeG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/f3qzdjEbWUCwFJzwBaRTeG.jpg" mos="" align="middle" fullscreen="" width="4219" height="2373" 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>Pixel chips are not known for being particularly powerful, and the Tensor chips haven't really made much headway in that department. Google may say that they're better suited for AI processing and other software enhancements, but it doesn't change the fact that Pixel phones have been lagging as a result of Tensor's weak performance.</p><p>Sadly, the Tensor G6 isn't expected to make many improvements, especially in the graphics department. According to leaker <a href="https://t.me/mysticleaks/161?comment=48458" target="_blank">Mystic Leaks</a>, the Tensor G6 will utilize a Power VR CXTP-48-1536 GPU — which first released back in 2021. That's right, Google could be using a five-year-old graphics processor in the Pixel 11, and that doesn't bode well for its performance. </p><p>The good news is that the same leak suggests the G6 chip will use a 4.11 GHz Arm C1 Ultra core, which is the best core Arm produces — and bodes well for computational performance at the very least. It will be joined by four C1 Pro cores running at 3.38 GHz and two slightly slower C1 Pro cores that clock in at 2.65 GHz. However, the leak suggests that the G6 will also drop to seven cores, compared to the eight-core CPU in the Tensor G5.</p><p><a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">A newer leak</a> also promises that the chip will be made with TSMC's 2nm node, which should offer better performance and energy efficiency than a 3nm chip. Though we won't know exactly how much of an improvement is on the way.</p><p>It's also a possibility that Google may reduce the amount of RAM, likely due to the ongoing AI-induced memory shortages. Mystic Leaks suggests that Google may offer an 8GB memory option, but didn't elaborate on which Pixel 11 variants may offer it instead of the usual 12GB. My guess is that it would be certain lower storage variants, since that's what the likes of Samsung does, but we don't know that for sure right now.</p><h3 class="article-body__section" id="section-google-pixel-11-battery-charging"><span>Google Pixel 11: Battery & charging</span></h3><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="m8GjKjwhaj3zaCDCMpToFo" name="Pixelsnap accessories" alt="Pixelsnap accessories on Pixel 10." src="https://cdn.mos.cms.futurecdn.net/m8GjKjwhaj3zaCDCMpToFo.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>We haven't heard anything about the Pixel 11's battery just yet, but I wouldn't hold my breath for any major changes this year. — especially where battery capacity is concerned. Since the Pixel 10 already offers a substantial 4,970 mAh of power, there isn't a lot of room for the Pixel 11 to add more.</p><p>Unfortunately,<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades"> recent leaks suggest</a> that the capacity will actually be reduced to 4,840 mAh. While it's not a huge loss of capacity, it would be disappointing to see a company with such a poor reputation for battery life deliberately hinder its newest devices. </p><p>Pixel battery life has improved over the past few years, but it's still quite far behind the likes of Apple and OnePlus. With the lower capacity in mind, we'd like to see some improvements to efficiency and better overall battery life as a result, even if the battery itself doesn't change that much.</p><p>Of course, we did see some major charging upgrades on the Pixel 10 Pro XL last year, with 45W wired charging and 25W Qi2 wireless charging. It would be nice to see some of those speeds make their way to smaller models, including Pixel 11 and Pixel 11 Pro. We also expect that Google will keep Qi2 charging, with <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixelsnap-is-the-pixel-10-upgrade-everyone-should-be-the-most-excited-about-heres-why">Pixelsnap's </a>magnetic connectivity around for the foreseeable future. </p><h3 class="article-body__section" id="section-google-pixel-11-outlook"><span>Google Pixel 11: Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3915px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gXEwy8xXFZoFFZ2jWe2DBG" name="Google Pixel 10 review" alt="Google Pixel 10 in the hand." src="https://cdn.mos.cms.futurecdn.net/gXEwy8xXFZoFFZ2jWe2DBG.jpg" mos="" align="middle" fullscreen="" width="3915" height="2202" 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>There are still a lot of unknowns where the Pixel 11 is concerned, which is actually quite surprising. Google is not known for keeping on top of leaks, and, rarely, we don't know everything about the newest Pixel before it actually launches. There's still time, though, and we're likely to hear something before the launch date rolls around.</p><p>We're not expecting a major upgrade this year, and while disappointing, that's to be expected considering the sheer amount of changes made to the Pixel 10. Of course, some of what we have heard does sound promising in certain areas, but the rumored downgrades may make this another unimpressive release by Google. I just hope that the Pixel 11 will be a little more impressive than these early leaks have let on.</p><p>We'll just have to wait and see what leaks in the coming months before we make up our mind, and failing that, see what Google has in store at the launch event. Hopefully, Jimmy Fallon isn't there 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/phones/samsung-phones/the-samsung-galaxy-s27-ultra-could-ditch-the-redundant-3x-zoom-for-this-much-bigger-camera-upgrade">The Samsung Galaxy S27 Ultra could ditch the 'redundant' 3x zoom for this much bigger camera upgrade</a></li><li><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">Apple confirms 'significantly higher memory costs' and that means iPhone a</a><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">nd Mac price hikes are almost certainly on the way</a></li><li><a href="https://www.tomsguide.com/phones/motorola-phones/we-just-saw-the-new-motorola-razr-2026-lineup-and-the-one-we-love-most-will-actually-surprise-you">We just went hands-on with the new Motorola Razr 2026 family, and this is the one I'd buy</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>