<?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/android-phones" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Android-phones ]]></title>
                <link>https://www.tomsguide.com/phones/android-phones</link>
        <description><![CDATA[ All the latest android-phones content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Wed, 16 Sep 2026 04:30:00 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ iPhone Duo vs Samsung Galaxy Z Fold 8 — which foldable is best for you? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The world of foldable phones is about to change in a big way, and it's all thanks to the release of the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a>. Apple's first foldable phone has generated a lot of buzz, and it certainly has the brand recognition going for it, but does it have what it takes to take the crown from Samsung's Galaxy Z Fold 8?</p><p>Samsung has almost a decade of experience making the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldables</a>, and the newly-released <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> is easily one of its best yet. It may lack some of the features of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, but it makes up for it with a wider, passport-shaped design that is much more comfortable to hold and use — especially for streaming movies and TV shows.</p><p>The question is, which of these wide foldables is the right one for you? We compare the iPhone Duo vs Samsung Galaxy Z Fold 8 to help you decide.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-specs"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone Duo</strong></p></td><td  ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$1,999 / £1,999 AU$3,499</p></td><td  ><p>From $1,899 / £1,699 / AU$2,699</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>5.4 inches (1398 x 2034)</p></td><td  ><p>5.5 inches (1248 x 1972)</p></td></tr><tr><td class="firstcol " ><p><strong>Foldable Display</strong></p></td><td  ><p>7.6 inches (1878 x 2670)</p></td><td  ><p>7.6 inches (2448 x 1848)</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>A20 Pro</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</p></td><td  ><p>12-16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB / 1TB / 2TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP (main), 48MP (ultrawide)</p></td><td  ><p>50MP main, 50MP (ultrawide)</p></td></tr><tr><td class="firstcol " ><p><strong>Front cameras</strong></p></td><td  ><p>12MP selfie, Under display camera</p></td><td  ><p>2 x 10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,883 mAh </p></td><td  ><p>4,800 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging speed</strong></p></td><td  ><p>60W (wired), 25W (wireless)</p></td><td  ><p>45W (wired), 20W (wireless)</p></td></tr><tr><td class="firstcol " ><p><strong>IP rating</strong></p></td><td  ><p>IP68</p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p><strong>Size (Closed)</strong></p></td><td  ><p>117.8 x 84.1 x 11.3mm ( 3.31 x 4.64 x 0.44 inches)</p></td><td  ><p>123.9 x 81.9 x 9.7 mm (4.88 × 3.22 × 0.38 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Size (Open)</strong></p></td><td  ><p>117.8 x 164.6 x 5.2mm (6.48 x 4.64 x 0.21 inches)</p></td><td  ><p>123.9 x 161.4 x 4.5 mm (4.87 x 6.35 x 0.17 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>254 g (8.96 oz)</p></td><td  ><p>201 g (7.09 oz)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Night Sky, Star White</p></td><td  ><p>Graphite, Cream, Lavender, Pistachio</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-price-availability"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:2297px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="g8hRHytY7NFuF8mBGUagyL" name="Apple iPhone Duo hands on" alt="Apple iPhone Duo shown in hand" src="https://cdn.mos.cms.futurecdn.net/g8hRHytY7NFuF8mBGUagyL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2297" height="1292" 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 iPhone Duo pre-orders open on October 16, with a release date scheduled for October 23. Prices start at $1,999 / £1,999 / AU$3,499 for a model with 256GB of storage. Higher storage options are available including 512GB ($2,199 / £2,199 / AU$3,899), 1TB ($2,599 / £2,599 / AU$4,699) and 2TB ($3,199 / £3,199 / AU$5,899).</p><p>The Samsung Galaxy Z Fold 8 is on sale now from all major retailers and carriers. Prices start at $1,899/£1,699/AU$2,699 for a model with 256GB of Storage and 12GB RAM. The 512GB model is $2,099 / £1,869 / AU$2,999, and a 1TB model with 16GB of RAM will cost you $2,499 / £2,209 / AU$3,599.</p><p>While Samsung doesn't offer a 2TB option, it does have the price advantage, with comparable storage costing $100 less in the U.S., with significantly higher gaps in the U.K. and Australia.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async></script><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-design-display"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:3474px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mj4pJujYsro9afSyvR3ffZ" name="Galaxy Z Fold 8 review-18" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/mj4pJujYsro9afSyvR3ffZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3474" height="1954" 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>Both phones have the wider passport-shaped design that's currently in fashion in the foldable phone market. Both unfold to produce a larger 7.6-inch display, and have an aspect ratio close to 4:3 — which is the same as a lot of popular tablets. However, the Galaxy Z Fold 8 has the slightly larger cover display, measuring 5.5-inches to Apple's 5.4-inches.</p><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing">Z Fold 8's screen offers an anti-glare coating</a> to improve visibility in bright conditions. The iPhone Duo answers with a nano-texture matte display. Both phones do a good job of minimizing the the crease, though additional time with the Z Fold 8 has proven that the creasing does get more prominent — regardless of how uniform the display is out of the box. However, we will see how the iPhone Duo's screen performs when it is released.</p><p>The most notable design differences come with size and weight. While the iPhone Duo is thinner than the likes of the iPhone Air, it's not quite as slim as the Z Fold 8, which sits at 4.5mm to the Duo's 5.2 mm when both phones are unfolded.</p><p>The Z Fold 8 is also noticeably lighter, with a weight of 7.09 ounces, versus the iPhone Duo's 8.96 ounces. That mass actually makes the Duo the heaviest iPhone Apple has released, likely on account of it being a double-sided phone.</p><p>The iPhone Duo has a major durability advantage, though. Only it offers IP68 durability for water and dust resistance. Samsung's foldable only has water resistance.</p><p>Both phones feature fingerprint scanners in the power buttons, and hole-punch cameras in the cover display. However, the Z Fold 8 also has a second hole-punch camera in the foldable screen, while Apple has opted for an under-display lens.</p><p>The Z Fold 8 is available to buy in Graphite, Cream, Lavender and Pistachio coloring, while iPhone Duo is only available in Night Sky (Blue) and Star White.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-cameras"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SoAi2j7o9Dqs6v288A4cEa" name="iPhone Duo edit 3" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/SoAi2j7o9Dqs6v288A4cEa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Both foldable phones come with a dual rear camera setup, consisting of main and ultrawide angle lenses. Sadly, unlike their non-folding counterparts, there is no telephoto lens here. That means all zooming capabilities are done digitally.</p><p>The iPhone Duo offers a pair of 48MP cameras, while the Z Fold 8 has 50MP. This seemingly gives the Z Fold 8 an advantage, but we won't know how these two cameras compare until we get an iPhone Duo for testing.</p><p>The Z Fold 8 managed to produce excellent photos in our testing other than its 10x digital zoom shots. We expect that the iPhone Duo will offer similar quality snaps, though Apple's computational photography could push things a little further.</p><p>The front cameras are a little different, since Apple hasn't just added identical lenses on both screens like Samsung did. The Galaxy Z Fold 8 features two 10MP hole-punch cameras, one in each of its screens. The iPhone Duo has a 12MP hole punch camera on the cover display and an unnamed "FaceTime Camera" that sits under the display.</p><p>This camera appears when in use, and has been advertised as useful for FaceTime and other video calls — rather than selfies and photography. That suggests that the quality isn't fantastic, but we will evaluate that in our iPhone Duo review.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-performance"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:3330px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tgL6AweqbNKzVVmQctz95Z" name="Galaxy Z Fold 8 review-22" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/tgL6AweqbNKzVVmQctz95Z-1920-80.jpg" mos="" align="middle" fullscreen="" width="3330" height="1873" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Apple used to dominate at performance, but in recent years Qualcomm's Snapdragon chips have caught up pretty fast — particularly thanks to Samsung's custom "for Galaxy" chipsets. The Z Fold 8 has one of those chips, the Snapdragon 8 Elite Gen 5 for Galaxy, which offers better performance than you'd find on the standard Gen 5 chip. </p><p>The iPhone Duo is set to come with the A20 Pro chipset, Apple's latest and best SoC that promises to be 20% faster than the A19 Pro, with a 40% improvement to graphics performance — which is something Apple chips have often struggled with. The chip also contains a second neural engine, which is said to double the AI processing power.</p><p>We haven't benchmarked the iPhone Duo yet, but we anticipate that the A20 Pro will outperform Samsung's foldable in terms of sheer speed but also sustained performance. That's because only the Duo has a vapor chamber for cooling.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-software-ai"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UDr8c5DLF9rP5aXyr9NwQ5" name="iphone duo software" alt="iphone duo two apps" src="https://cdn.mos.cms.futurecdn.net/UDr8c5DLF9rP5aXyr9NwQ5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple has been far behind in the AI arms race, but the new Siri AI that comes with the <a href="https://www.tomsguide.com/phones/iphones/ios-27-7-features-you-need-to-try-first-after-updating">iOS 27</a> update is a lot more capable than before. Siri can perform multiple tasks with a single voice prompt; it offers smarter personal context; and you get more expressive voice options. There's also new AI-powered photo editing features like Reframe and Clean up. </p><p>The iPhone Duo also comes with a new Smart Tracking camera feature, similar to the <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-using-the-galaxy-z-fold-8s-myfancam-on-my-dogs-but-i-hit-a-major-wall">Z Fold 8's MyFanCam</a>, which tracks users in frame when recording video. </p><p>The Z Fold 8 comes with all the best Galaxy AI features, including Now Nudge's contextual resurfacing tool, Now Brief to prepare you for different parts of the day, and the advanced version of Circle to Search that can identify multiple things at once.</p><p>Multitasking might be the clincher between these two devices, though. The Z Fold 8 supports up to four windows at once, as well as floating app windows that can sit wherever you like on screen. However, the iPhone Duo only supports two Split View windows at a time.. Sadly, the iPhone Duo only supports two Split View apps at a time, which puts it at a productivity disadvantage. </p><p>Then again, the iPhone Duo <a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">also supports the Apple Pencil (USB-C) stylus</a>, which is something the Z Fold 8 can not do. Apple's foldable has a feature that detects the angle of the screen, similar to the Galaxy Z Fold 8 Ultra's Flex View mode. This alters the interface of the app in question to account for the angle of your screen. Sadly, while the Ultra model offers this feature, the regular Z Fold 8 itself misses out.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-battery"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: Battery</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2332px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="SzqLLphnRAA8Pka8QDDMCZ" name="Galaxy Z Fold 8 review-11" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/SzqLLphnRAA8Pka8QDDMCZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2332" height="1312" 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 iPhone Duo is expected to come with a 4,883 mAh battery pack, which is incrementally larger than the Z Fold 8's 4,800 mAh battery. But that doesn't necessarily mean it will last longer based on capacity alone.</p><p>Apple has worked hard to improve energy efficiency over the years, and that hasn't changed. The A20 Pro reportedly offers a 30% improvement in energy efficiency, while the Apple C2 modem is reportedly 15% more efficient than the older C1X. </p><p>Combined with the battery, we could see the iPhone Duo jump ahead from the Z Fold 8's 12 hours and 19 minute battery life based on that optimization alone. Though we'll obviously need to do some in-depth battery life testing before we can say for sure.</p><p>As for charging, expect the iPhone Duo to recharge faster. The 60W wired charging restores 50% charge in just 15 minutes and you get 25W wireless charging. The Z Fold 8 only has 45W wired charging and 20W wireless charging, which allows it to regain 43% in 15 minutes.</p><p>That's not a huge difference, but Apple has the edge. Plus, only the iiPhone Duo offers MagSafe charging.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-outlook"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AnoVUix3XWR3icSBBfRFFg" name="Z Fold 8 vs iPhone Duo" alt="Galaxy Z Fold 8 vs iPhone duo" src="https://cdn.mos.cms.futurecdn.net/AnoVUix3XWR3icSBBfRFFg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>We sill need to test the iPhone Duo to see how well the software works and how long the battery life is . But based on our hands-on impressions and everything we know so far, Apple should give Samsung some real competition. </p><p>The iPhone Duo has some notable advantages, including its IP68 durability, powerful A20 chip and, an even less visible crease, MagSafe and Apple Pencil support and faster charging.</p><p>The Galaxy Z Fold 8 is $100 less than the iPhone Duo; it comes in a thinner and lighter design, and it has better for multitasking. We also can't ignore the fact that this is Apple's first attempt at a foldable phone, while Samsung is currently on its eighth generation. </p><p>Stay tuned for our in-depth face-of to declare a winner.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-exclusive-apple-ceo-john-ternus-variable-aperture-camera">iPhone 18 Pro Exclusive: Apple CEO John Ternus on why the new variable aperture camera is the ‘best of both worlds’</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-7-features-you-need-to-try-first-after-updating">iOS 27: 7 features you need to try first after updating</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-vs-iphone-14-pro-max-all-the-differences-and-should-you-upgrade">iPhone 18 Pro Max vs iPhone 14 Pro Max: All the differences and should you upgrade?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-which-foldable-is-best-for-you</link>
                                                                            <description>
                            <![CDATA[ iPhone Duo is coming to try and claim Galaxy Z fold 8's crown, but can it suceed? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LpwvKcoYHeFHZgdeWTVZk3</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 16 Sep 2026 04:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The world of foldable phones is about to change in a big way, and it's all thanks to the release of the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a>. Apple's first foldable phone has generated a lot of buzz, and it certainly has the brand recognition going for it, but does it have what it takes to take the crown from Samsung's Galaxy Z Fold 8?</p><p>Samsung has almost a decade of experience making the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldables</a>, and the newly-released <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> is easily one of its best yet. It may lack some of the features of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, but it makes up for it with a wider, passport-shaped design that is much more comfortable to hold and use — especially for streaming movies and TV shows.</p><p>The question is, which of these wide foldables is the right one for you? We compare the iPhone Duo vs Samsung Galaxy Z Fold 8 to help you decide.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-specs"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone Duo</strong></p></td><td  ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$1,999 / £1,999 AU$3,499</p></td><td  ><p>From $1,899 / £1,699 / AU$2,699</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>5.4 inches (1398 x 2034)</p></td><td  ><p>5.5 inches (1248 x 1972)</p></td></tr><tr><td class="firstcol " ><p><strong>Foldable Display</strong></p></td><td  ><p>7.6 inches (1878 x 2670)</p></td><td  ><p>7.6 inches (2448 x 1848)</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>A20 Pro</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</p></td><td  ><p>12-16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB / 1TB / 2TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP (main), 48MP (ultrawide)</p></td><td  ><p>50MP main, 50MP (ultrawide)</p></td></tr><tr><td class="firstcol " ><p><strong>Front cameras</strong></p></td><td  ><p>12MP selfie, Under display camera</p></td><td  ><p>2 x 10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,883 mAh </p></td><td  ><p>4,800 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging speed</strong></p></td><td  ><p>60W (wired), 25W (wireless)</p></td><td  ><p>45W (wired), 20W (wireless)</p></td></tr><tr><td class="firstcol " ><p><strong>IP rating</strong></p></td><td  ><p>IP68</p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p><strong>Size (Closed)</strong></p></td><td  ><p>117.8 x 84.1 x 11.3mm ( 3.31 x 4.64 x 0.44 inches)</p></td><td  ><p>123.9 x 81.9 x 9.7 mm (4.88 × 3.22 × 0.38 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Size (Open)</strong></p></td><td  ><p>117.8 x 164.6 x 5.2mm (6.48 x 4.64 x 0.21 inches)</p></td><td  ><p>123.9 x 161.4 x 4.5 mm (4.87 x 6.35 x 0.17 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>254 g (8.96 oz)</p></td><td  ><p>201 g (7.09 oz)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Night Sky, Star White</p></td><td  ><p>Graphite, Cream, Lavender, Pistachio</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-price-availability"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:2297px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="g8hRHytY7NFuF8mBGUagyL" name="Apple iPhone Duo hands on" alt="Apple iPhone Duo shown in hand" src="https://cdn.mos.cms.futurecdn.net/g8hRHytY7NFuF8mBGUagyL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2297" height="1292" 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 iPhone Duo pre-orders open on October 16, with a release date scheduled for October 23. Prices start at $1,999 / £1,999 / AU$3,499 for a model with 256GB of storage. Higher storage options are available including 512GB ($2,199 / £2,199 / AU$3,899), 1TB ($2,599 / £2,599 / AU$4,699) and 2TB ($3,199 / £3,199 / AU$5,899).</p><p>The Samsung Galaxy Z Fold 8 is on sale now from all major retailers and carriers. Prices start at $1,899/£1,699/AU$2,699 for a model with 256GB of Storage and 12GB RAM. The 512GB model is $2,099 / £1,869 / AU$2,999, and a 1TB model with 16GB of RAM will cost you $2,499 / £2,209 / AU$3,599.</p><p>While Samsung doesn't offer a 2TB option, it does have the price advantage, with comparable storage costing $100 less in the U.S., with significantly higher gaps in the U.K. and Australia.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async></script><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-design-display"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:3474px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mj4pJujYsro9afSyvR3ffZ" name="Galaxy Z Fold 8 review-18" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/mj4pJujYsro9afSyvR3ffZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3474" height="1954" 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>Both phones have the wider passport-shaped design that's currently in fashion in the foldable phone market. Both unfold to produce a larger 7.6-inch display, and have an aspect ratio close to 4:3 — which is the same as a lot of popular tablets. However, the Galaxy Z Fold 8 has the slightly larger cover display, measuring 5.5-inches to Apple's 5.4-inches.</p><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing">Z Fold 8's screen offers an anti-glare coating</a> to improve visibility in bright conditions. The iPhone Duo answers with a nano-texture matte display. Both phones do a good job of minimizing the the crease, though additional time with the Z Fold 8 has proven that the creasing does get more prominent — regardless of how uniform the display is out of the box. However, we will see how the iPhone Duo's screen performs when it is released.</p><p>The most notable design differences come with size and weight. While the iPhone Duo is thinner than the likes of the iPhone Air, it's not quite as slim as the Z Fold 8, which sits at 4.5mm to the Duo's 5.2 mm when both phones are unfolded.</p><p>The Z Fold 8 is also noticeably lighter, with a weight of 7.09 ounces, versus the iPhone Duo's 8.96 ounces. That mass actually makes the Duo the heaviest iPhone Apple has released, likely on account of it being a double-sided phone.</p><p>The iPhone Duo has a major durability advantage, though. Only it offers IP68 durability for water and dust resistance. Samsung's foldable only has water resistance.</p><p>Both phones feature fingerprint scanners in the power buttons, and hole-punch cameras in the cover display. However, the Z Fold 8 also has a second hole-punch camera in the foldable screen, while Apple has opted for an under-display lens.</p><p>The Z Fold 8 is available to buy in Graphite, Cream, Lavender and Pistachio coloring, while iPhone Duo is only available in Night Sky (Blue) and Star White.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-cameras"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SoAi2j7o9Dqs6v288A4cEa" name="iPhone Duo edit 3" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/SoAi2j7o9Dqs6v288A4cEa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Both foldable phones come with a dual rear camera setup, consisting of main and ultrawide angle lenses. Sadly, unlike their non-folding counterparts, there is no telephoto lens here. That means all zooming capabilities are done digitally.</p><p>The iPhone Duo offers a pair of 48MP cameras, while the Z Fold 8 has 50MP. This seemingly gives the Z Fold 8 an advantage, but we won't know how these two cameras compare until we get an iPhone Duo for testing.</p><p>The Z Fold 8 managed to produce excellent photos in our testing other than its 10x digital zoom shots. We expect that the iPhone Duo will offer similar quality snaps, though Apple's computational photography could push things a little further.</p><p>The front cameras are a little different, since Apple hasn't just added identical lenses on both screens like Samsung did. The Galaxy Z Fold 8 features two 10MP hole-punch cameras, one in each of its screens. The iPhone Duo has a 12MP hole punch camera on the cover display and an unnamed "FaceTime Camera" that sits under the display.</p><p>This camera appears when in use, and has been advertised as useful for FaceTime and other video calls — rather than selfies and photography. That suggests that the quality isn't fantastic, but we will evaluate that in our iPhone Duo review.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-performance"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:3330px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tgL6AweqbNKzVVmQctz95Z" name="Galaxy Z Fold 8 review-22" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/tgL6AweqbNKzVVmQctz95Z-1920-80.jpg" mos="" align="middle" fullscreen="" width="3330" height="1873" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Apple used to dominate at performance, but in recent years Qualcomm's Snapdragon chips have caught up pretty fast — particularly thanks to Samsung's custom "for Galaxy" chipsets. The Z Fold 8 has one of those chips, the Snapdragon 8 Elite Gen 5 for Galaxy, which offers better performance than you'd find on the standard Gen 5 chip. </p><p>The iPhone Duo is set to come with the A20 Pro chipset, Apple's latest and best SoC that promises to be 20% faster than the A19 Pro, with a 40% improvement to graphics performance — which is something Apple chips have often struggled with. The chip also contains a second neural engine, which is said to double the AI processing power.</p><p>We haven't benchmarked the iPhone Duo yet, but we anticipate that the A20 Pro will outperform Samsung's foldable in terms of sheer speed but also sustained performance. That's because only the Duo has a vapor chamber for cooling.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-software-ai"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UDr8c5DLF9rP5aXyr9NwQ5" name="iphone duo software" alt="iphone duo two apps" src="https://cdn.mos.cms.futurecdn.net/UDr8c5DLF9rP5aXyr9NwQ5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple has been far behind in the AI arms race, but the new Siri AI that comes with the <a href="https://www.tomsguide.com/phones/iphones/ios-27-7-features-you-need-to-try-first-after-updating">iOS 27</a> update is a lot more capable than before. Siri can perform multiple tasks with a single voice prompt; it offers smarter personal context; and you get more expressive voice options. There's also new AI-powered photo editing features like Reframe and Clean up. </p><p>The iPhone Duo also comes with a new Smart Tracking camera feature, similar to the <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-using-the-galaxy-z-fold-8s-myfancam-on-my-dogs-but-i-hit-a-major-wall">Z Fold 8's MyFanCam</a>, which tracks users in frame when recording video. </p><p>The Z Fold 8 comes with all the best Galaxy AI features, including Now Nudge's contextual resurfacing tool, Now Brief to prepare you for different parts of the day, and the advanced version of Circle to Search that can identify multiple things at once.</p><p>Multitasking might be the clincher between these two devices, though. The Z Fold 8 supports up to four windows at once, as well as floating app windows that can sit wherever you like on screen. However, the iPhone Duo only supports two Split View windows at a time.. Sadly, the iPhone Duo only supports two Split View apps at a time, which puts it at a productivity disadvantage. </p><p>Then again, the iPhone Duo <a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">also supports the Apple Pencil (USB-C) stylus</a>, which is something the Z Fold 8 can not do. Apple's foldable has a feature that detects the angle of the screen, similar to the Galaxy Z Fold 8 Ultra's Flex View mode. This alters the interface of the app in question to account for the angle of your screen. Sadly, while the Ultra model offers this feature, the regular Z Fold 8 itself misses out.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-battery"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: Battery</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2332px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="SzqLLphnRAA8Pka8QDDMCZ" name="Galaxy Z Fold 8 review-11" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/SzqLLphnRAA8Pka8QDDMCZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2332" height="1312" 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 iPhone Duo is expected to come with a 4,883 mAh battery pack, which is incrementally larger than the Z Fold 8's 4,800 mAh battery. But that doesn't necessarily mean it will last longer based on capacity alone.</p><p>Apple has worked hard to improve energy efficiency over the years, and that hasn't changed. The A20 Pro reportedly offers a 30% improvement in energy efficiency, while the Apple C2 modem is reportedly 15% more efficient than the older C1X. </p><p>Combined with the battery, we could see the iPhone Duo jump ahead from the Z Fold 8's 12 hours and 19 minute battery life based on that optimization alone. Though we'll obviously need to do some in-depth battery life testing before we can say for sure.</p><p>As for charging, expect the iPhone Duo to recharge faster. The 60W wired charging restores 50% charge in just 15 minutes and you get 25W wireless charging. The Z Fold 8 only has 45W wired charging and 20W wireless charging, which allows it to regain 43% in 15 minutes.</p><p>That's not a huge difference, but Apple has the edge. Plus, only the iiPhone Duo offers MagSafe charging.</p><h3 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-outlook"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AnoVUix3XWR3icSBBfRFFg" name="Z Fold 8 vs iPhone Duo" alt="Galaxy Z Fold 8 vs iPhone duo" src="https://cdn.mos.cms.futurecdn.net/AnoVUix3XWR3icSBBfRFFg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>We sill need to test the iPhone Duo to see how well the software works and how long the battery life is . But based on our hands-on impressions and everything we know so far, Apple should give Samsung some real competition. </p><p>The iPhone Duo has some notable advantages, including its IP68 durability, powerful A20 chip and, an even less visible crease, MagSafe and Apple Pencil support and faster charging.</p><p>The Galaxy Z Fold 8 is $100 less than the iPhone Duo; it comes in a thinner and lighter design, and it has better for multitasking. We also can't ignore the fact that this is Apple's first attempt at a foldable phone, while Samsung is currently on its eighth generation. </p><p>Stay tuned for our in-depth face-of to declare a winner.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-exclusive-apple-ceo-john-ternus-variable-aperture-camera">iPhone 18 Pro Exclusive: Apple CEO John Ternus on why the new variable aperture camera is the ‘best of both worlds’</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-7-features-you-need-to-try-first-after-updating">iOS 27: 7 features you need to try first after updating</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-vs-iphone-14-pro-max-all-the-differences-and-should-you-upgrade">iPhone 18 Pro Max vs iPhone 14 Pro Max: All the differences and should you upgrade?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Fold 8 vs iPhone Duo — 7 ways Samsung's wider foldable beats Apple ]]></title>
                                                                                                <dc:content><![CDATA[ <p>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 </a>has been a strong reminder of why Samsung has been able to dominate the foldable phone market for so long. While it's true the company hasn't had a lot of competition, the fresh new form factor of the Fold 8 seems to have reinvigorated the interest in Galaxy foldables — just in time for Apple to jump onto the foldable bandwagon with the iPhone Duo.</p><p>The simple fact that this is a foldable iPhone means the Duo has the potential to offer Samsung the first serious competition for several years. The phone hasn't even been released yet, and we've already identified key <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more">ways that the iPhone Duo beats the similarly-styled Galaxy Z Fold 8</a>. But what about the other way round? </p><p>Samsung has almost a decade of foldable experience, and that shows in the ways its latest release compares to Apple's first attempt. Here are seven ways the Galaxy Z Fold 8 beats the iPhone Duo.</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/2qNfOa5AuVU" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-it-s-lighter-and-thinner"><span>It's lighter and thinner</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2693px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xsfHUrdQAp5k99yND4fgSY" name="Galaxy Z Fold 8 review-26" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/xsfHUrdQAp5k99yND4fgSY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2693" height="1515" 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>Rumors suggested that the iPhone Duo would be the thinnest phone Apple has ever built, at<a href="https://www.tomsguide.com/phones/iphones/the-iphone-ultra-will-be-the-thinnest-iphone-ever-heres-how-it-will-stack-up-to-other-foldables"> 4.5mm (0.17-inches) thick when unfolded</a>. That wasn't the case, and we now know that the iPhone Duo is 5.2mm (0.2 inches) thick — which is slightly less than the 5.6mm iPhone Air. </p><p>Meanwhile the Galaxy Z Fold 8 really is 4.5mm thick when it's unfolded, making it one of the thinnest phones you can go out and buy. It's also much lighter than the iPhone Duo, weighing 201 grams (7.09 ounces) to Apple's 254 grams (8.96 ounces). That weight actually <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-tipped-to-be-heaviest-iphone-ever-heres-3-reasons-why-thats-a-good-thing">makes the Duo one of the heaviest iPhones Apple has ever released</a>. </p><p>The difference between the two may not seem like much, it does mean that the Z Fold 8 is likely to be more comfortable to use.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async></script><h3 class="article-body__section" id="section-a-cheaper-price-tag"><span>A cheaper price 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:2332px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="SzqLLphnRAA8Pka8QDDMCZ" name="Galaxy Z Fold 8 review-11" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/SzqLLphnRAA8Pka8QDDMCZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2332" height="1312" 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>Foldable phones are not cheap, with both the Galaxy Z Fold 8 and iPhone Duo costing several hundred dollars more than their non-folding counterparts. But when it comes to the actual asking price, Samsung has the edge.</p><p>The cheapest Samsung Galaxy Z Fold 8 is $1,899, which gets you a model with 256GB of storage and 12GB of RAM. Apple's cheapest iPhone Duo offers the same level of memory and storage, but it costs $1,999 — $100 more.</p><p>That price disparity sticks around for the 512GB and 1TB options as well. Samsung charges $2,099 and $2,499, respectively, while Apple's prices are both $100 more at $2,199 and $2,599. Samsung doesn't offer a 2TB storage option; the 2TB Duo comes in at $3,199.</p><h3 class="article-body__section" id="section-better-multitasking"><span>Better multitasking</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2990px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RaSYsGcZBSQJkWkCfWgBgW" name="Galaxy Z Fold 8-16" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/RaSYsGcZBSQJkWkCfWgBgW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2990" height="1682" 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/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">Multitasking has never been Apple's strong suit,</a> especially on the iPhone, and it looks like iPhone Duo won't be at quite the same level as the Galaxy Z Fold 8.</p><p>The Z Fold 8 supports up to three windows at once, as well as five floating app windows that can sit wherever you like on screen. This is also possible on Apple's iPads, but iPhone Duo only supports two Split View windows at a time.</p><p>Considering one of the benefits of iPhone Duo is the ability to carry an iPad-like device in your pocket, the limited nature of Split View means you're missing out on an important productivity feature other devices have offered for years.</p><h3 class="article-body__section" id="section-dex"><span>DeX</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5276px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AieHmWF2DYNhYEc6WiBT4n" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1920-80.jpg" mos="" align="middle" fullscreen="" width="5276" height="2968" 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 desktop modes have slowly started making a comeback on Android phones, Apple has always seen fit to completely ignore them. The Z Fold 8 offers <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">Samsung's DeX desktop mode</a>, while the iPhone Duo lacks any sort of equivalent feature.</p><p>The idea behind DeX is that you plug your Galaxy phone into a monitor, at which point the phone loads up a desktop-like UI on the larger screen. That way you can use your phone as a desktop computer, without needing to carry around a laptop or tablet everywhere you go. </p><p>It's a fairly niche feature, and it's reliant on having access to a spare display. But it is a way to get more use out of a Z Fold 8, and put all the performance hardware to good use. It's unfortunate that the iPhone Duo is limited to its own display and UI.</p><h3 class="article-body__section" id="section-physical-sim-slot"><span>Physical SIM slot</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Z4xNVatT98sDPTLnax5YtC" name="GettyImages-921346060.jpg" alt="eSIM" src="https://cdn.mos.cms.futurecdn.net/Z4xNVatT98sDPTLnax5YtC-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: AndreyPopov)</span></figcaption></figure><p>Apple has been betting big on eSIMs in recent years, and some regions (including the U.S.) <a href="https://www.tomsguide.com/phones/iphones/iphone-17-and-iphone-air-are-latest-phones-to-push-esim-heres-why-i-dont-want-to-give-up-physical-sim-cards">can't use physical SIM cards in newer models of iPhone.</a> </p><p>Sadly, while European versions of the iPhone 18 Pro still come with a physical SIM card slot, that won't be the case with iPhone Duo. Apple has confirmed that the phone will be eSIM only all around the world. So no matter where you live, there's zero opportunity to use a physical nano SIM card.</p><p>The Galaxy Z Fold 8 still supports both eSIM and physical SIM cards, which gives users a lot more choice and flexibility. It's pretty small in the grand scheme of things, but as someone that has to swap phones fairly often, the process of transferring eSIMs to a new device is nowhere near as simple as swapping a physical card between devices. </p><h3 class="article-body__section" id="section-16gb-ram-option"><span>16GB RAM 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:3508px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="CnV2R6YCsPFej5e7GpiWfZ" name="Galaxy Z Fold 8 review-24" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/CnV2R6YCsPFej5e7GpiWfZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3508" height="1973" 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 iPhone Duo comes with 12GB of RAM no matter which storage variant you get. Samsung starts off by offering 12GB on its cheapest models, but those buying the 1TB storage option will actually get an additional 4GB of RAM thrown in — for a total of 16GB.</p><p>Why does that matter? It all comes down to why memory prices have been skyrocketing over the past year: AI processing. AI features are heavily reliant on RAM, and generally speaking the more memory that's available, the faster things will run. That's particularly important for on-device AI processing, which is faster and more secure than offloading those tasks to the cloud.</p><p>Historically iPhones haven't needed as much RAM as Android phones, on account of the strong links between Apple's hardware and software. But not even Apple can bypass AI's need for memory, and we'll have to wait and see how the Duo (and A20 Pro chipset) performs in AI benchmarking tests before we can say how much better or worse it could have been with more RAM.</p><h3 class="article-body__section" id="section-8k-video-recording"><span>8K video recording</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="F6qr2SDN3gLqxsmgpqVYsY" name="Fold 8 back 2" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/F6qr2SDN3gLqxsmgpqVYsY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo is no slouch in the camera department, at least not as far as we can tell from the specs and limited hands-on time. While the actual camera hardware looks fairly similar to that of the Z Fold 8 (48MP main lenses compared to 50MP), there is one thing Samsung has a leg up on — ultra-high-resolution video recording.</p><p>Like many Samsung flagships, the Z Fold 8 is capable of recording video at 8k resolution at 30 frames per second or 4K resolution at 120fps. Meanwhile, the iPhone Duo is capped at 4K resolution video recording, with frame rates of 120fps on the main camera and 60fps on the ultrawide.</p><p>Admittedly, the opportunities to play 8K video are pretty slim for the average phone user — so recording in such high resolution is just a waste of storage space. But it is a key area in which Samsung outpaces Apple, which might be important to you.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-battery-capacity-confirmed-in-europe-heres-how-they-compare-to-iphone-17-pro">iPhone 18 Pro and Pro Max battery capacity confirmed in Europe — here's how they compare to iPhone 17 Pro</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apples-just-extended-free-access-to-emergency-satellite-communication-for-another-year-its-the-third-time-this-has-happened">Apple's just extended free access to emergency satellite communication for another year — it's the third time this has happened</a></li><li><a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">Steve Jobs said there would never be an iPhone stylus but iPhone Duo just proved him wrong — and it'll be a better device for it</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-vs-iphone-duo-7-ways-samsungs-wider-foldable-beats-apple</link>
                                                                            <description>
                            <![CDATA[ Samsung has almost a decade of foldable experience; here's how the Galaxy Z fold 8 beats iPhone Duo in a few key ways ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">xx4meTm6QL3AcNUSs7aMoj</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AnoVUix3XWR3icSBBfRFFg-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 13 Sep 2026 09:30:00 +0000</pubDate>                                                                                                                                <updated>Mon, 14 Sep 2026 14:30:09 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[iPhones]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/AnoVUix3XWR3icSBBfRFFg-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8 vs iPhone duo]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8 vs iPhone duo]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8 vs iPhone duo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AnoVUix3XWR3icSBBfRFFg-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>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 </a>has been a strong reminder of why Samsung has been able to dominate the foldable phone market for so long. While it's true the company hasn't had a lot of competition, the fresh new form factor of the Fold 8 seems to have reinvigorated the interest in Galaxy foldables — just in time for Apple to jump onto the foldable bandwagon with the iPhone Duo.</p><p>The simple fact that this is a foldable iPhone means the Duo has the potential to offer Samsung the first serious competition for several years. The phone hasn't even been released yet, and we've already identified key <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more">ways that the iPhone Duo beats the similarly-styled Galaxy Z Fold 8</a>. But what about the other way round? </p><p>Samsung has almost a decade of foldable experience, and that shows in the ways its latest release compares to Apple's first attempt. Here are seven ways the Galaxy Z Fold 8 beats the iPhone Duo.</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/2qNfOa5AuVU" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-it-s-lighter-and-thinner"><span>It's lighter and thinner</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2693px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xsfHUrdQAp5k99yND4fgSY" name="Galaxy Z Fold 8 review-26" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/xsfHUrdQAp5k99yND4fgSY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2693" height="1515" 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>Rumors suggested that the iPhone Duo would be the thinnest phone Apple has ever built, at<a href="https://www.tomsguide.com/phones/iphones/the-iphone-ultra-will-be-the-thinnest-iphone-ever-heres-how-it-will-stack-up-to-other-foldables"> 4.5mm (0.17-inches) thick when unfolded</a>. That wasn't the case, and we now know that the iPhone Duo is 5.2mm (0.2 inches) thick — which is slightly less than the 5.6mm iPhone Air. </p><p>Meanwhile the Galaxy Z Fold 8 really is 4.5mm thick when it's unfolded, making it one of the thinnest phones you can go out and buy. It's also much lighter than the iPhone Duo, weighing 201 grams (7.09 ounces) to Apple's 254 grams (8.96 ounces). That weight actually <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-tipped-to-be-heaviest-iphone-ever-heres-3-reasons-why-thats-a-good-thing">makes the Duo one of the heaviest iPhones Apple has ever released</a>. </p><p>The difference between the two may not seem like much, it does mean that the Z Fold 8 is likely to be more comfortable to use.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async></script><h3 class="article-body__section" id="section-a-cheaper-price-tag"><span>A cheaper price 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:2332px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="SzqLLphnRAA8Pka8QDDMCZ" name="Galaxy Z Fold 8 review-11" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/SzqLLphnRAA8Pka8QDDMCZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2332" height="1312" 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>Foldable phones are not cheap, with both the Galaxy Z Fold 8 and iPhone Duo costing several hundred dollars more than their non-folding counterparts. But when it comes to the actual asking price, Samsung has the edge.</p><p>The cheapest Samsung Galaxy Z Fold 8 is $1,899, which gets you a model with 256GB of storage and 12GB of RAM. Apple's cheapest iPhone Duo offers the same level of memory and storage, but it costs $1,999 — $100 more.</p><p>That price disparity sticks around for the 512GB and 1TB options as well. Samsung charges $2,099 and $2,499, respectively, while Apple's prices are both $100 more at $2,199 and $2,599. Samsung doesn't offer a 2TB storage option; the 2TB Duo comes in at $3,199.</p><h3 class="article-body__section" id="section-better-multitasking"><span>Better multitasking</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2990px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RaSYsGcZBSQJkWkCfWgBgW" name="Galaxy Z Fold 8-16" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/RaSYsGcZBSQJkWkCfWgBgW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2990" height="1682" 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/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">Multitasking has never been Apple's strong suit,</a> especially on the iPhone, and it looks like iPhone Duo won't be at quite the same level as the Galaxy Z Fold 8.</p><p>The Z Fold 8 supports up to three windows at once, as well as five floating app windows that can sit wherever you like on screen. This is also possible on Apple's iPads, but iPhone Duo only supports two Split View windows at a time.</p><p>Considering one of the benefits of iPhone Duo is the ability to carry an iPad-like device in your pocket, the limited nature of Split View means you're missing out on an important productivity feature other devices have offered for years.</p><h3 class="article-body__section" id="section-dex"><span>DeX</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5276px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AieHmWF2DYNhYEc6WiBT4n" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1920-80.jpg" mos="" align="middle" fullscreen="" width="5276" height="2968" 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 desktop modes have slowly started making a comeback on Android phones, Apple has always seen fit to completely ignore them. The Z Fold 8 offers <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">Samsung's DeX desktop mode</a>, while the iPhone Duo lacks any sort of equivalent feature.</p><p>The idea behind DeX is that you plug your Galaxy phone into a monitor, at which point the phone loads up a desktop-like UI on the larger screen. That way you can use your phone as a desktop computer, without needing to carry around a laptop or tablet everywhere you go. </p><p>It's a fairly niche feature, and it's reliant on having access to a spare display. But it is a way to get more use out of a Z Fold 8, and put all the performance hardware to good use. It's unfortunate that the iPhone Duo is limited to its own display and UI.</p><h3 class="article-body__section" id="section-physical-sim-slot"><span>Physical SIM slot</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Z4xNVatT98sDPTLnax5YtC" name="GettyImages-921346060.jpg" alt="eSIM" src="https://cdn.mos.cms.futurecdn.net/Z4xNVatT98sDPTLnax5YtC-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: AndreyPopov)</span></figcaption></figure><p>Apple has been betting big on eSIMs in recent years, and some regions (including the U.S.) <a href="https://www.tomsguide.com/phones/iphones/iphone-17-and-iphone-air-are-latest-phones-to-push-esim-heres-why-i-dont-want-to-give-up-physical-sim-cards">can't use physical SIM cards in newer models of iPhone.</a> </p><p>Sadly, while European versions of the iPhone 18 Pro still come with a physical SIM card slot, that won't be the case with iPhone Duo. Apple has confirmed that the phone will be eSIM only all around the world. So no matter where you live, there's zero opportunity to use a physical nano SIM card.</p><p>The Galaxy Z Fold 8 still supports both eSIM and physical SIM cards, which gives users a lot more choice and flexibility. It's pretty small in the grand scheme of things, but as someone that has to swap phones fairly often, the process of transferring eSIMs to a new device is nowhere near as simple as swapping a physical card between devices. </p><h3 class="article-body__section" id="section-16gb-ram-option"><span>16GB RAM 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:3508px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="CnV2R6YCsPFej5e7GpiWfZ" name="Galaxy Z Fold 8 review-24" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/CnV2R6YCsPFej5e7GpiWfZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3508" height="1973" 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 iPhone Duo comes with 12GB of RAM no matter which storage variant you get. Samsung starts off by offering 12GB on its cheapest models, but those buying the 1TB storage option will actually get an additional 4GB of RAM thrown in — for a total of 16GB.</p><p>Why does that matter? It all comes down to why memory prices have been skyrocketing over the past year: AI processing. AI features are heavily reliant on RAM, and generally speaking the more memory that's available, the faster things will run. That's particularly important for on-device AI processing, which is faster and more secure than offloading those tasks to the cloud.</p><p>Historically iPhones haven't needed as much RAM as Android phones, on account of the strong links between Apple's hardware and software. But not even Apple can bypass AI's need for memory, and we'll have to wait and see how the Duo (and A20 Pro chipset) performs in AI benchmarking tests before we can say how much better or worse it could have been with more RAM.</p><h3 class="article-body__section" id="section-8k-video-recording"><span>8K video recording</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="F6qr2SDN3gLqxsmgpqVYsY" name="Fold 8 back 2" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/F6qr2SDN3gLqxsmgpqVYsY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo is no slouch in the camera department, at least not as far as we can tell from the specs and limited hands-on time. While the actual camera hardware looks fairly similar to that of the Z Fold 8 (48MP main lenses compared to 50MP), there is one thing Samsung has a leg up on — ultra-high-resolution video recording.</p><p>Like many Samsung flagships, the Z Fold 8 is capable of recording video at 8k resolution at 30 frames per second or 4K resolution at 120fps. Meanwhile, the iPhone Duo is capped at 4K resolution video recording, with frame rates of 120fps on the main camera and 60fps on the ultrawide.</p><p>Admittedly, the opportunities to play 8K video are pretty slim for the average phone user — so recording in such high resolution is just a waste of storage space. But it is a key area in which Samsung outpaces Apple, which might be important to you.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-battery-capacity-confirmed-in-europe-heres-how-they-compare-to-iphone-17-pro">iPhone 18 Pro and Pro Max battery capacity confirmed in Europe — here's how they compare to iPhone 17 Pro</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apples-just-extended-free-access-to-emergency-satellite-communication-for-another-year-its-the-third-time-this-has-happened">Apple's just extended free access to emergency satellite communication for another year — it's the third time this has happened</a></li><li><a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">Steve Jobs said there would never be an iPhone stylus but iPhone Duo just proved him wrong — and it'll be a better device for it</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo vs Galaxy Z Fold 8 — 7 ways Apple beats Samsung's foldable ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The launch of <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a> is a big deal. This is the first ever foldable developed by Apple, and for that reason alone it has the chance to dethrone Samsung as the king of the foldable phone space. But it also helps that Apple has produced a phone with a lot of great qualities, and will naturally lead to comparisons 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</a>.</p><p>The two phones are similar in a bunch of ways, including their wider, passport-inspired design. However, there are a number of key ways Apple has improved on the foldable design, and beaten Samsung at its own game. Considering this is Apple's first foldable, that might just make the extended development time worth it. Here are seven ways iPhone Duo actually beats the Galaxy Z Fold 8.</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/2qNfOa5AuVU" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-ip68-rating"><span>IP68 rating</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="i4QF9zqZdmy4sZPuE8hXFa" name="iphone duo edit 4" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/i4QF9zqZdmy4sZPuE8hXFa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Google proved that a foldable could get an IP68 water and dust resistance rating with last year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>. This means that, despite all the moving parts around the hinge, Google was able to seal the phone up and ensure dust and other foreign particles can't get inside. Apple continued that trend by also sealing the iPhone Duo up to the same IP68 standard.</p><p>Meanwhile the Galaxy Z Fold 8 is only rated to IP48. The 8 means that it's water-tight, capable of being submerged in up to a meter of water for up to 30 minutes — just like Google and Apple. However, the 4 means that the Z Fold 8 offers no protection against dust, or any other particles larger than one millimeter (0.04 inches).</p><p>In other words, there's a whole bunch of nasty stuff that could get inside the Z Fold 8 and cause problems — and you might not even realize it. In other words, you should be able to take the iPhone Duo to the beach.</p><h3 class="article-body__section" id="section-apple-pencil-support"><span>Apple Pencil support</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="utmMc9q6LHmFEEaQK8rvhB" name="iPhone Duo apple pencil" alt="iPhone Duo with Apple Pencil" src="https://cdn.mos.cms.futurecdn.net/utmMc9q6LHmFEEaQK8rvhB-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Samsung used to sell foldables that supported the S Pen stylus, but the last one to be released was 2024's<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-6-review-test-results"> Galaxy Z Fold 6.</a> From the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Z Fold 7 </a>onwards, Samsung stripped out the S Pen functionality, removing a critical part of the display makeup in order to reduce the phone's thickness. This means that the Z Fold 8 does not support any kind of active stylus. </p><p>Meanwhile, the <a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">iPhone Duo not only offers stylus support</a>, it's compatible with the <a href="https://www.tomsguide.com/hands-on/apple-pencil-usb-c-hands-on-is-this-pen-mightier">Apple Pencil USB-C</a> — which works with the majority of iPads still on sale. Samsung needed a special kind of S Pen for the foldable screen, but the iPhone Duo uses a stylus that you may already have.</p><p>It's the most basic Apple stylus on sale, and it lacks key features you'll find on the <a href="https://www.tomsguide.com/tablets/ipads/apple-announces-apple-pencil-pro-with-barrel-roll-and-squeeze-capabilities">Apple Pencil Pro</a>, but it's better than nothing.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async></script><h3 class="article-body__section" id="section-magsafe"><span>MagSafe</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="UDr8c5DLF9rP5aXyr9NwQ5" name="iphone duo software" alt="iphone duo two apps" src="https://cdn.mos.cms.futurecdn.net/UDr8c5DLF9rP5aXyr9NwQ5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Magnetic wireless charging is a rarity, in part because Apple had a stranglehold on it for so long. While <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 wireless charging</a> does allow phones to add a MagSafe-style magnetic ring, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-has-supports-qi2-charging-but-theres-a-big-catch">Samsung has avoided doing this </a>— preferring to utilize special magnetic cases instead. The Galaxy Z Fold 8 is no exception to this trend, despite offering all the other benefits of Qi2 charging.</p><p>Apple had no such issue adding <a href="https://www.tomsguide.com/phones/iphones/what-is-apple-magsafe-and-which-iphones-support-it">MagSafe</a> to the iPhone Duo, as it's done with virtually every iPhone released since the <a href="https://www.tomsguide.com/reviews/iphone-12">iPhone 12.</a> Plus, despite the phone's unique shape and size, Apple confirmed that it is compatible with MagSafe accessories and chargers  — meaning all your old MagSafe products should still fit.</p><h3 class="article-body__section" id="section-faster-60w-charging"><span>Faster 60W 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:2144px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4oMko37sfDNte8KzjvzD2M" name="Apple iPhone Duo hands on-3" alt="Apple iPhone Duo shown in hand" src="https://cdn.mos.cms.futurecdn.net/4oMko37sfDNte8KzjvzD2M-1920-80.jpg" mos="" align="middle" fullscreen="" width="2144" height="1206" 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>MagSafe isn't the only way iPhone Duo beats Z Fold 8 in the charging department. Apple's foldable also offers faster charging speeds, regardless of whether you use MagSafe or a plug-in charging cable.</p><p>Wired charging supports up to 60W speeds, which regains 50% charge in just 15 minutes. Meanwhile, wireless charging is capped at 25W. In comparison, the Galaxy Z Fold 8 offers 45W wired charging, and can regain 43% in 15 minutes. Wireless charging is also slightly slower at 20W, which puts it at a slight disadvantage to the iPhone.</p><h3 class="article-body__section" id="section-better-front-facing-camera-hardware"><span>Better front-facing camera hardware</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="SoAi2j7o9Dqs6v288A4cEa" name="iPhone Duo edit 3" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/SoAi2j7o9Dqs6v288A4cEa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Like the S Pen, Samsung used to offer an <a href="https://www.tomsguide.com/news/samsung-galaxy-z-fold-3-under-display-camera-tested-its-amazing-and-flawed">under-display camera</a> on Galaxy Z Fold phones — and it hasn't been seen since the Galaxy Z Fold 6. The quality was not great, and it was no surprise that later Z folds switched back to the hole-punch camera design. Apple is giving under-display camera tech another chance at the limelight.</p><p>Apple hasn't specified the quality of this camera, noting that it's designed for use with FaceTime and other video calling software rather than selfies. That suggests the quality isn't great. But at least Apple is willing to try new things with the Duo, rather than reusing the same lackluster selfie camera hardware for multiple years in a row.</p><p>Plus, the iPhone Duo's actual selfie camera, which is in the cover display, offers higher resolution than Samsung. We're talking 12MP compared to 10MP, and while resolution doesn't automatically mean quality, it's likely that this is a similar selfie camera to the one in iPhone 17 Pro Max — <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">which I found to take better photos than the Galaxy Z Fold 8 Ultra.</a></p><h3 class="article-body__section" id="section-iphone-duo-software-reacts-based-on-folded-hinge-state"><span>iPhone Duo software reacts based on folded hinge state</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="N49opwHV76RM3BfKvL8REa" name="iPhone duo edit 2" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/N49opwHV76RM3BfKvL8REa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>A lot of Samsung phones offer what the company calls "Flex Mode," which allows the phone to react and adapt depending on the angle of the central hinge. Samsung Galaxy Z Fold 8 is the first Galaxy foldable to ditch this feature, despite the fact it's available on the Ultra model. This reduces the functionality of the phone somewhat, especially compared to iPhone Duo.</p><p>Apple doesn't have a special name for this feature, but the Duo does react depending on the angle of the hinge and the state of the fold itself. So if you have Netflix running, folding the screen to a 90-degree angle will shift the video to one side of the screen, and media controls to the other. </p><h3 class="article-body__section" id="section-vapor-chamber-cooling"><span>Vapor chamber cooling</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="CN7RzmKPJyev7oUAf2fdFa" name="iPhone duo gaming" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/CN7RzmKPJyev7oUAf2fdFa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo offers an A20 Pro chipset with vapor chamber cooling, which helps dissipate heat. This means that the iPhone should offer better sustained performance, especially when doing resource-heavy tasks like gaming, multitasking and AI processing. </p><p>We haven't done any performance or thermal testing on the iPhone Duo just yet, so we don't know how effective the vapor chamber will be. That said, the Fold 8 doesn't offer a vapor chamber at all. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apple-quietly-jacks-the-prices-of-the-iphone-16-iphone-17-and-iphone-air-heres-how-much-youll-pay-now"><strong>Apple quietly jacks the prices of the iPhone 16, iPhone 17, and iPhone Air — here's how much you'll pay now</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apples-just-extended-free-access-to-emergency-satellite-communication-for-another-year-its-the-third-time-this-has-happened"><strong>Apple's just extended free access to emergency satellite communication for another year — it's the third time this has happened</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it"><strong>Steve Jobs said there would never be an iPhone stylus but iPhone Duo just proved him wrong — and it'll be a better device for it</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more</link>
                                                                            <description>
                            <![CDATA[ iPhone Duo may be the first Apple foldable, but it's already beating Samsung at its own game. Here are seven ways it beats the Galaxy Z Fold 8. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">YMufsSbjwum9vd5JjKhXUQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 11 Sep 2026 07:30:00 +0000</pubDate>                                                                                                                                <updated>Fri, 11 Sep 2026 14:22:10 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The launch of <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a> is a big deal. This is the first ever foldable developed by Apple, and for that reason alone it has the chance to dethrone Samsung as the king of the foldable phone space. But it also helps that Apple has produced a phone with a lot of great qualities, and will naturally lead to comparisons 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</a>.</p><p>The two phones are similar in a bunch of ways, including their wider, passport-inspired design. However, there are a number of key ways Apple has improved on the foldable design, and beaten Samsung at its own game. Considering this is Apple's first foldable, that might just make the extended development time worth it. Here are seven ways iPhone Duo actually beats the Galaxy Z Fold 8.</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/2qNfOa5AuVU" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-ip68-rating"><span>IP68 rating</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="i4QF9zqZdmy4sZPuE8hXFa" name="iphone duo edit 4" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/i4QF9zqZdmy4sZPuE8hXFa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Google proved that a foldable could get an IP68 water and dust resistance rating with last year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>. This means that, despite all the moving parts around the hinge, Google was able to seal the phone up and ensure dust and other foreign particles can't get inside. Apple continued that trend by also sealing the iPhone Duo up to the same IP68 standard.</p><p>Meanwhile the Galaxy Z Fold 8 is only rated to IP48. The 8 means that it's water-tight, capable of being submerged in up to a meter of water for up to 30 minutes — just like Google and Apple. However, the 4 means that the Z Fold 8 offers no protection against dust, or any other particles larger than one millimeter (0.04 inches).</p><p>In other words, there's a whole bunch of nasty stuff that could get inside the Z Fold 8 and cause problems — and you might not even realize it. In other words, you should be able to take the iPhone Duo to the beach.</p><h3 class="article-body__section" id="section-apple-pencil-support"><span>Apple Pencil support</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="utmMc9q6LHmFEEaQK8rvhB" name="iPhone Duo apple pencil" alt="iPhone Duo with Apple Pencil" src="https://cdn.mos.cms.futurecdn.net/utmMc9q6LHmFEEaQK8rvhB-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Samsung used to sell foldables that supported the S Pen stylus, but the last one to be released was 2024's<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-6-review-test-results"> Galaxy Z Fold 6.</a> From the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Z Fold 7 </a>onwards, Samsung stripped out the S Pen functionality, removing a critical part of the display makeup in order to reduce the phone's thickness. This means that the Z Fold 8 does not support any kind of active stylus. </p><p>Meanwhile, the <a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">iPhone Duo not only offers stylus support</a>, it's compatible with the <a href="https://www.tomsguide.com/hands-on/apple-pencil-usb-c-hands-on-is-this-pen-mightier">Apple Pencil USB-C</a> — which works with the majority of iPads still on sale. Samsung needed a special kind of S Pen for the foldable screen, but the iPhone Duo uses a stylus that you may already have.</p><p>It's the most basic Apple stylus on sale, and it lacks key features you'll find on the <a href="https://www.tomsguide.com/tablets/ipads/apple-announces-apple-pencil-pro-with-barrel-roll-and-squeeze-capabilities">Apple Pencil Pro</a>, but it's better than nothing.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async></script><h3 class="article-body__section" id="section-magsafe"><span>MagSafe</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="UDr8c5DLF9rP5aXyr9NwQ5" name="iphone duo software" alt="iphone duo two apps" src="https://cdn.mos.cms.futurecdn.net/UDr8c5DLF9rP5aXyr9NwQ5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Magnetic wireless charging is a rarity, in part because Apple had a stranglehold on it for so long. While <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 wireless charging</a> does allow phones to add a MagSafe-style magnetic ring, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-has-supports-qi2-charging-but-theres-a-big-catch">Samsung has avoided doing this </a>— preferring to utilize special magnetic cases instead. The Galaxy Z Fold 8 is no exception to this trend, despite offering all the other benefits of Qi2 charging.</p><p>Apple had no such issue adding <a href="https://www.tomsguide.com/phones/iphones/what-is-apple-magsafe-and-which-iphones-support-it">MagSafe</a> to the iPhone Duo, as it's done with virtually every iPhone released since the <a href="https://www.tomsguide.com/reviews/iphone-12">iPhone 12.</a> Plus, despite the phone's unique shape and size, Apple confirmed that it is compatible with MagSafe accessories and chargers  — meaning all your old MagSafe products should still fit.</p><h3 class="article-body__section" id="section-faster-60w-charging"><span>Faster 60W 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:2144px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4oMko37sfDNte8KzjvzD2M" name="Apple iPhone Duo hands on-3" alt="Apple iPhone Duo shown in hand" src="https://cdn.mos.cms.futurecdn.net/4oMko37sfDNte8KzjvzD2M-1920-80.jpg" mos="" align="middle" fullscreen="" width="2144" height="1206" 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>MagSafe isn't the only way iPhone Duo beats Z Fold 8 in the charging department. Apple's foldable also offers faster charging speeds, regardless of whether you use MagSafe or a plug-in charging cable.</p><p>Wired charging supports up to 60W speeds, which regains 50% charge in just 15 minutes. Meanwhile, wireless charging is capped at 25W. In comparison, the Galaxy Z Fold 8 offers 45W wired charging, and can regain 43% in 15 minutes. Wireless charging is also slightly slower at 20W, which puts it at a slight disadvantage to the iPhone.</p><h3 class="article-body__section" id="section-better-front-facing-camera-hardware"><span>Better front-facing camera hardware</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="SoAi2j7o9Dqs6v288A4cEa" name="iPhone Duo edit 3" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/SoAi2j7o9Dqs6v288A4cEa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Like the S Pen, Samsung used to offer an <a href="https://www.tomsguide.com/news/samsung-galaxy-z-fold-3-under-display-camera-tested-its-amazing-and-flawed">under-display camera</a> on Galaxy Z Fold phones — and it hasn't been seen since the Galaxy Z Fold 6. The quality was not great, and it was no surprise that later Z folds switched back to the hole-punch camera design. Apple is giving under-display camera tech another chance at the limelight.</p><p>Apple hasn't specified the quality of this camera, noting that it's designed for use with FaceTime and other video calling software rather than selfies. That suggests the quality isn't great. But at least Apple is willing to try new things with the Duo, rather than reusing the same lackluster selfie camera hardware for multiple years in a row.</p><p>Plus, the iPhone Duo's actual selfie camera, which is in the cover display, offers higher resolution than Samsung. We're talking 12MP compared to 10MP, and while resolution doesn't automatically mean quality, it's likely that this is a similar selfie camera to the one in iPhone 17 Pro Max — <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">which I found to take better photos than the Galaxy Z Fold 8 Ultra.</a></p><h3 class="article-body__section" id="section-iphone-duo-software-reacts-based-on-folded-hinge-state"><span>iPhone Duo software reacts based on folded hinge state</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="N49opwHV76RM3BfKvL8REa" name="iPhone duo edit 2" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/N49opwHV76RM3BfKvL8REa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>A lot of Samsung phones offer what the company calls "Flex Mode," which allows the phone to react and adapt depending on the angle of the central hinge. Samsung Galaxy Z Fold 8 is the first Galaxy foldable to ditch this feature, despite the fact it's available on the Ultra model. This reduces the functionality of the phone somewhat, especially compared to iPhone Duo.</p><p>Apple doesn't have a special name for this feature, but the Duo does react depending on the angle of the hinge and the state of the fold itself. So if you have Netflix running, folding the screen to a 90-degree angle will shift the video to one side of the screen, and media controls to the other. </p><h3 class="article-body__section" id="section-vapor-chamber-cooling"><span>Vapor chamber cooling</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="CN7RzmKPJyev7oUAf2fdFa" name="iPhone duo gaming" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/CN7RzmKPJyev7oUAf2fdFa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo offers an A20 Pro chipset with vapor chamber cooling, which helps dissipate heat. This means that the iPhone should offer better sustained performance, especially when doing resource-heavy tasks like gaming, multitasking and AI processing. </p><p>We haven't done any performance or thermal testing on the iPhone Duo just yet, so we don't know how effective the vapor chamber will be. That said, the Fold 8 doesn't offer a vapor chamber at all. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apple-quietly-jacks-the-prices-of-the-iphone-16-iphone-17-and-iphone-air-heres-how-much-youll-pay-now"><strong>Apple quietly jacks the prices of the iPhone 16, iPhone 17, and iPhone Air — here's how much you'll pay now</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apples-just-extended-free-access-to-emergency-satellite-communication-for-another-year-its-the-third-time-this-has-happened"><strong>Apple's just extended free access to emergency satellite communication for another year — it's the third time this has happened</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it"><strong>Steve Jobs said there would never be an iPhone stylus but iPhone Duo just proved him wrong — and it'll be a better device for it</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I put Tecno's zero-bezel phone next to an iPhone 17 Pro Max — the difference is wild ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Tecno always manages to bring some crazy concepts to trade shows. Last year, we saw the company debut an <a href="https://www.tomsguide.com/phones/android-phones/i-just-went-hands-on-with-the-worlds-slimmest-smartphone-at-mwc">iPhone Air competitor</a> — even before the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-vs-iphone-17-pro-vs-pro-max-which-new-iphone-should-you-buy">iPhone Air</a> became a thing — that too with a huge 5,160 mAh battery inside. </p><p>Then at MWC 2026, we saw its <a href="https://www.tomsguide.com/phones/android-phones/this-modular-phone-concept-lets-you-connect-anything-from-an-external-microphone-to-a-whole-camera-lens-via-magnets">modular phone concept</a>. And Tecno isn't holding back at <a href="https://www.tomsguide.com/tech-events/best-of-ifa-2026-we-found-the-26-top-new-gadgets">IFA 2026</a> either, as it has just shown off a new concept phone with practically zero bezel around the display.</p><p>Now, for those unfamiliar, the bezel is basically the black border that surrounds the display on your phone. Smartphone makers have been trying to shrink it for years, with the ultimate goal of maximizing the screen-to-body ratio and making the display take up as much of the front as possible. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7gYrSffGrL7uByXtTQSY4N" name="tecno-concept-bezel-free-3" alt="Hands-on with the Tecno bezel-free smartphone at IFA 2026" src="https://cdn.mos.cms.futurecdn.net/7gYrSffGrL7uByXtTQSY4N-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>There was slow but steady progress for a while, but bezel innovation has sort of stalled over the past couple of years. And to be fair, I don't think we really needed much more progress. Flagships like the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-ultra-vs-galaxy-s25-ultra">Galaxy S26 Ultra</a> already have incredibly thin bezels, to the point where they barely bother me anymore. </p><p>But Tecno's new concept proves that it's technically possible to go even further and shrink those bezels to (almost) zero. </p><p>The company has managed to practically eliminate the black border around the display, as long as you don't mind the actual frame of the phone still being there. Tecno says this is strictly a concept for now, but it could give us an early look at where smartphone displays are heading next. </p><p>The concept phone features a 6.78-inch display with a 144 Hz refresh rate, and a screen appears to go all the way to the furthest edges of the device. Of course, the physical frame is still there to hold everything together, but there's virtually no visible black border separating it from the display. If you look closely from certain angles, you can still make out a teeny-tiny border, but you really have to look for it.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YP9CDYLt5G5kmArgowcQ5N" name="tecno-vs-iphone-1" alt="Hands-on with the Tecno bezel-free smartphone at IFA 2026" src="https://cdn.mos.cms.futurecdn.net/YP9CDYLt5G5kmArgowcQ5N-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>In isolation, though, I don't think you immediately realize how different it looks. So I put the Tecno concept next to an <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a>, and that's where the difference became much easier to see. The iPhone already has incredibly thin bezels at around 1.36 mm, but next to Tecno's concept, even those look <em>slightly</em> noticeable. </p><p>Getting the bezel this thin wasn't simple. Tecno says it had to completely redesign the display manufacturing process to achieve it. The company had to invent an inverted screen assembly process, which means the entire display module is now inserted from the back of the phone instead of from the front, as is usually the case.</p><p>Apart from the bezel-less display, the rest of the phone isn't quite as exciting, but then again, this is a concept device, so it doesn't really need to be. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KpDWn4FZCXbf5PtkiQoRoM" name="tecno-concept-bezel-free-4" alt="Hands-on with the Tecno bezel-free smartphone at IFA 2026" src="https://cdn.mos.cms.futurecdn.net/KpDWn4FZCXbf5PtkiQoRoM-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>One thing that did surprise me was the weight, or rather the lack of it. The phone felt incredibly light in the hand, and that's coming from someone who daily-drives an <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review">iPhone Air</a>. </p><p>What's even more impressive is that Tecno has managed to fit a massive 6,000 mAh battery inside. The concept is powered by the MediaTek Dimensity 7300e, which obviously isn't going to win any benchmark competitions, but performance isn't really the point of this device. </p><p>The star here is that zero-border display, and Tecno has shown that something like this is actually possible. It's a shame that the phone may never make it beyond the concept stage, because after seeing it in person, I definitely want this kind of display on a phone I can actually buy soon. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/audio/earbuds/i-just-went-hands-on-with-the-worlds-smallest-earbuds-heres-what-happened-and-yes-they-have-anc-now">I just went hands-on with the world's smallest earbuds — here's what happened (and yes, they have ANC now)</a></li><li><a href="https://www.tomsguide.com/phones/motorola-phones/motorola-just-gave-the-razr-a-crystal-studded-glow-up-with-35-swarovski-crystals-and-i-cant-believe-how-much-i-like-it">Motorola just gave the Razr a gem-studded glow-up with 35 Swarovski Crystals — and I can't believe how much I like it</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-tested-every-major-foldable-phone-this-year-and-the-iphone-ultra-can-beat-them-all-with-this-one-killer-feature">I've tested every major foldable phone this year, and the iPhone Ultra can beat them all with this one killer feature</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/android-phones/tecno-bezel-less-phone-hands-on-ifa-2026</link>
                                                                            <description>
                            <![CDATA[ Tecno's new IFA 2026 concept phone features a 6.78-inch display with virtually no visible bezel separating the screen from the frame. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">FyxhuSd5C4Rs3NEnAvjjLJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/V3o2ZbGdFyyLPdt3U3fthX-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 05 Sep 2026 12:03:05 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Android Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Sanuj Bhatia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/8p5BvMVA7cnu5AWkxnTjRC-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/V3o2ZbGdFyyLPdt3U3fthX-1280-80.jpg">
                                                            <media:credit><![CDATA[Sanuj Bhatia / Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Hands-on with Tecno&#039;s bezel-less concept smartphone at IFA 2026]]></media:description>                                                            <media:text><![CDATA[Hands-on with Tecno&#039;s bezel-less concept smartphone at IFA 2026]]></media:text>
                                <media:title type="plain"><![CDATA[Hands-on with Tecno&#039;s bezel-less concept smartphone at IFA 2026]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/V3o2ZbGdFyyLPdt3U3fthX-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Tecno always manages to bring some crazy concepts to trade shows. Last year, we saw the company debut an <a href="https://www.tomsguide.com/phones/android-phones/i-just-went-hands-on-with-the-worlds-slimmest-smartphone-at-mwc">iPhone Air competitor</a> — even before the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-vs-iphone-17-pro-vs-pro-max-which-new-iphone-should-you-buy">iPhone Air</a> became a thing — that too with a huge 5,160 mAh battery inside. </p><p>Then at MWC 2026, we saw its <a href="https://www.tomsguide.com/phones/android-phones/this-modular-phone-concept-lets-you-connect-anything-from-an-external-microphone-to-a-whole-camera-lens-via-magnets">modular phone concept</a>. And Tecno isn't holding back at <a href="https://www.tomsguide.com/tech-events/best-of-ifa-2026-we-found-the-26-top-new-gadgets">IFA 2026</a> either, as it has just shown off a new concept phone with practically zero bezel around the display.</p><p>Now, for those unfamiliar, the bezel is basically the black border that surrounds the display on your phone. Smartphone makers have been trying to shrink it for years, with the ultimate goal of maximizing the screen-to-body ratio and making the display take up as much of the front as possible. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7gYrSffGrL7uByXtTQSY4N" name="tecno-concept-bezel-free-3" alt="Hands-on with the Tecno bezel-free smartphone at IFA 2026" src="https://cdn.mos.cms.futurecdn.net/7gYrSffGrL7uByXtTQSY4N-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>There was slow but steady progress for a while, but bezel innovation has sort of stalled over the past couple of years. And to be fair, I don't think we really needed much more progress. Flagships like the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-ultra-vs-galaxy-s25-ultra">Galaxy S26 Ultra</a> already have incredibly thin bezels, to the point where they barely bother me anymore. </p><p>But Tecno's new concept proves that it's technically possible to go even further and shrink those bezels to (almost) zero. </p><p>The company has managed to practically eliminate the black border around the display, as long as you don't mind the actual frame of the phone still being there. Tecno says this is strictly a concept for now, but it could give us an early look at where smartphone displays are heading next. </p><p>The concept phone features a 6.78-inch display with a 144 Hz refresh rate, and a screen appears to go all the way to the furthest edges of the device. Of course, the physical frame is still there to hold everything together, but there's virtually no visible black border separating it from the display. If you look closely from certain angles, you can still make out a teeny-tiny border, but you really have to look for it.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YP9CDYLt5G5kmArgowcQ5N" name="tecno-vs-iphone-1" alt="Hands-on with the Tecno bezel-free smartphone at IFA 2026" src="https://cdn.mos.cms.futurecdn.net/YP9CDYLt5G5kmArgowcQ5N-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>In isolation, though, I don't think you immediately realize how different it looks. So I put the Tecno concept next to an <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a>, and that's where the difference became much easier to see. The iPhone already has incredibly thin bezels at around 1.36 mm, but next to Tecno's concept, even those look <em>slightly</em> noticeable. </p><p>Getting the bezel this thin wasn't simple. Tecno says it had to completely redesign the display manufacturing process to achieve it. The company had to invent an inverted screen assembly process, which means the entire display module is now inserted from the back of the phone instead of from the front, as is usually the case.</p><p>Apart from the bezel-less display, the rest of the phone isn't quite as exciting, but then again, this is a concept device, so it doesn't really need to be. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KpDWn4FZCXbf5PtkiQoRoM" name="tecno-concept-bezel-free-4" alt="Hands-on with the Tecno bezel-free smartphone at IFA 2026" src="https://cdn.mos.cms.futurecdn.net/KpDWn4FZCXbf5PtkiQoRoM-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>One thing that did surprise me was the weight, or rather the lack of it. The phone felt incredibly light in the hand, and that's coming from someone who daily-drives an <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review">iPhone Air</a>. </p><p>What's even more impressive is that Tecno has managed to fit a massive 6,000 mAh battery inside. The concept is powered by the MediaTek Dimensity 7300e, which obviously isn't going to win any benchmark competitions, but performance isn't really the point of this device. </p><p>The star here is that zero-border display, and Tecno has shown that something like this is actually possible. It's a shame that the phone may never make it beyond the concept stage, because after seeing it in person, I definitely want this kind of display on a phone I can actually buy soon. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/audio/earbuds/i-just-went-hands-on-with-the-worlds-smallest-earbuds-heres-what-happened-and-yes-they-have-anc-now">I just went hands-on with the world's smallest earbuds — here's what happened (and yes, they have ANC now)</a></li><li><a href="https://www.tomsguide.com/phones/motorola-phones/motorola-just-gave-the-razr-a-crystal-studded-glow-up-with-35-swarovski-crystals-and-i-cant-believe-how-much-i-like-it">Motorola just gave the Razr a gem-studded glow-up with 35 Swarovski Crystals — and I can't believe how much I like it</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-tested-every-major-foldable-phone-this-year-and-the-iphone-ultra-can-beat-them-all-with-this-one-killer-feature">I've tested every major foldable phone this year, and the iPhone Ultra can beat them all with this one killer feature</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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[ Motorola just gave the Razr a gem-studded glow-up with 35 Swarovski Crystals — and I can't believe how much I like it ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Instead of redesigning its hinge or eliminating the crease, Motorola has given its iconic Razr foldable a major, exterior glow-up as part of its Brilliant Collection, complete with 35 individual Swarovski Crystals.</p><p>This isn’t the first time that Motorola has worked with both Swarovski and Pantone to reimagine one of its foldables. However, unlike the Ice Melt Razr from 2025’s collection, this new edition based on the <a href="https://www.tomsguide.com/phones/motorola-phones/no-need-to-open-how-the-motorola-razr-70-ultras-4-inch-cover-screen-and-snapdragon-8-elite-chipset-change-the-rules-of-the-flip-phone">Motorola Razr 70</a> sports a much darker hue.</p><p>After holding this device myself, I really like how it feels and if I were after something more elegant as my daily driver, the new Motorola Razr with Crystals by Swarovski might be reason enough to give one of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> a try.</p><p>Here’s everything you need to know about the latest addition to Motorola’s Brilliant Collection along with the price which is surprisingly affordable for a crystal-studded foldable.</p><h2 id="the-crystal-studded-foldable-returns">The crystal-studded foldable returns</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="dM6xD4sw98FAV8TyYepw98" name="Motorola Razr with Crystals by Swarovski-1-LEDE" alt="The front and back of the Motorola Razr with Crystals by Swarovski" src="https://cdn.mos.cms.futurecdn.net/dM6xD4sw98FAV8TyYepw98-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The new Motorola Razr with Crystals by Swarovski is essentially a special edition of the Razr 70 (the standard <a href="https://www.tomsguide.com/phones/motorola-phones/i-tested-the-entire-motorola-razr-2026-lineup-for-a-week-heres-the-one-id-recommend">Motorola Razr 2026</a> in the U.S.) in a new color with 35 hand-positioned Silver Night crystals. As for the color, the device is wrapped in Pantone Meteorite.</p><p>When I first saw the phone, I was struck by the sense of elegance throughout. It feels great thanks to the leather-inspired texture of its exterior though Motorola is including a clear protective case to keep all of those crystals — and your pockets — safe from scratches.</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="dj9LC58KrSCfzk8ArPWLqA" name="Motorola Razr with Crystals by Swarovski-5" alt="The Motorola Razr with Crystals by Swarovski opened in hand" src="https://cdn.mos.cms.futurecdn.net/dj9LC58KrSCfzk8ArPWLqA-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>On the outside, there’s a 3.6-inch external display that you can run full apps on, check notifications, reply to messages and more. When unfolded, you’re met with a smooth 6.9-inch Extreme AMOLED display powered by a 4,800 mAh battery that delivers up to 36 hours of battery life on a single charge.</p><p>As for the cameras, the Motorola Razr with Crystals By Swarovski sports a dual 50MP main camera system. Since this is a foldable, you can close its lid and use these for even more glamorous selfies too.</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="DweKQ4P2DTRrPJ9PV43RKL" name="Motorola Razr with Crystals by Swarovski-3" alt="A close-up shot of the crystal in the hinge of the Motorola Razr with Crystals by Swarovski" src="https://cdn.mos.cms.futurecdn.net/DweKQ4P2DTRrPJ9PV43RKL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While there are crystals throughout the diamond-shaped pattern around back, the one that really stuck out to me is embedded in the device’s hinge. Likewise, there are also three crystals across the top of the phone’s smaller outer display.</p><h2 id="style-beyond-the-fold">Style beyond the 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9zwMtzRAwKNgdsLfBseu9Q" name="Motorola Razr with Crystals by Swarovski-6" alt="The Motorola Razr with Crystals by Swarovski on display at IFA 2026" src="https://cdn.mos.cms.futurecdn.net/9zwMtzRAwKNgdsLfBseu9Q-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Foldables are certainly becoming more mainstream as we saw with the recent release of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Fold 8</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Fold 8 Ultra</a>. Then with the foldable <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-exclusive-gurman-on-price-release-date-and-secret-weapon-versus-android">iPhone Ultra</a> on the horizon, I expect we’ll soon see more foldables while out and about than ever before. However, even that phone won’t turn heads like the Motorola Razr with Crystals by Swarovski.</p><p>So what does this crystal-studded foldable cost? A lot less than you’d think actually. While we’ve seen custom-made iPhones covered in gems before which start at $10K and go all the way up to the hundreds of thousands of dollars, Motorola is selling this one for just $899.</p><p>The latest device from Motorola’s Brilliant Collection will be available in select markets in North America, Europe, the Middle East, Turkey, Africa and Latin America soon, though we don’t have an exact release date.</p><p>The Motorola Razr with Crystals by Swarovski certainly won’t be for everyone but if you want a phone that stands out from the crowd while looking absolutely stunning doing so, this is the one to get.</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/motorola-phones/motorola-2026-foldables-compared-book-style-powerhouse-vs-elite-compact-flip"><strong>Motorola 2026 foldables compared: book-style powerhouse vs elite compact flip</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-tested-every-major-foldable-phone-this-year-and-the-iphone-ultra-can-beat-them-all-with-this-one-killer-feature"><strong>I've tested every major foldable phone this year, and the iPhone Ultra can beat them all with this one killer feature</strong></a></li><li><a href="https://www.tomsguide.com/phones/android-phones/i-pushed-the-latest-foldables-from-samsung-motorola-and-honor-into-a-no-mercy-battle-royale-and-there-can-be-only-one-winner"><strong>I pushed the latest foldables from Samsung, Motorola and Honor into a no‑mercy battle royale and there was one clear winner</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/motorola-phones/motorola-just-gave-the-razr-a-crystal-studded-glow-up-with-35-swarovski-crystals-and-i-cant-believe-how-much-i-like-it</link>
                                                                            <description>
                            <![CDATA[ Motorola’s latest Brilliant Collection addition mixes Swarovski crystals with a leather-inspired texture for a truly premium look and feel. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jHVeFDVVqJnSL7dmi4xoA5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/LUhT8B8XfMuyCryoaQQmR5-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 03 Sep 2026 16:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Motorola Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <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/LUhT8B8XfMuyCryoaQQmR5-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Motorola Razr with Crystals by Swarovski in hand]]></media:description>                                                            <media:text><![CDATA[The Motorola Razr with Crystals by Swarovski in hand]]></media:text>
                                <media:title type="plain"><![CDATA[The Motorola Razr with Crystals by Swarovski in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/LUhT8B8XfMuyCryoaQQmR5-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Instead of redesigning its hinge or eliminating the crease, Motorola has given its iconic Razr foldable a major, exterior glow-up as part of its Brilliant Collection, complete with 35 individual Swarovski Crystals.</p><p>This isn’t the first time that Motorola has worked with both Swarovski and Pantone to reimagine one of its foldables. However, unlike the Ice Melt Razr from 2025’s collection, this new edition based on the <a href="https://www.tomsguide.com/phones/motorola-phones/no-need-to-open-how-the-motorola-razr-70-ultras-4-inch-cover-screen-and-snapdragon-8-elite-chipset-change-the-rules-of-the-flip-phone">Motorola Razr 70</a> sports a much darker hue.</p><p>After holding this device myself, I really like how it feels and if I were after something more elegant as my daily driver, the new Motorola Razr with Crystals by Swarovski might be reason enough to give one of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> a try.</p><p>Here’s everything you need to know about the latest addition to Motorola’s Brilliant Collection along with the price which is surprisingly affordable for a crystal-studded foldable.</p><h2 id="the-crystal-studded-foldable-returns">The crystal-studded foldable returns</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="dM6xD4sw98FAV8TyYepw98" name="Motorola Razr with Crystals by Swarovski-1-LEDE" alt="The front and back of the Motorola Razr with Crystals by Swarovski" src="https://cdn.mos.cms.futurecdn.net/dM6xD4sw98FAV8TyYepw98-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The new Motorola Razr with Crystals by Swarovski is essentially a special edition of the Razr 70 (the standard <a href="https://www.tomsguide.com/phones/motorola-phones/i-tested-the-entire-motorola-razr-2026-lineup-for-a-week-heres-the-one-id-recommend">Motorola Razr 2026</a> in the U.S.) in a new color with 35 hand-positioned Silver Night crystals. As for the color, the device is wrapped in Pantone Meteorite.</p><p>When I first saw the phone, I was struck by the sense of elegance throughout. It feels great thanks to the leather-inspired texture of its exterior though Motorola is including a clear protective case to keep all of those crystals — and your pockets — safe from scratches.</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="dj9LC58KrSCfzk8ArPWLqA" name="Motorola Razr with Crystals by Swarovski-5" alt="The Motorola Razr with Crystals by Swarovski opened in hand" src="https://cdn.mos.cms.futurecdn.net/dj9LC58KrSCfzk8ArPWLqA-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>On the outside, there’s a 3.6-inch external display that you can run full apps on, check notifications, reply to messages and more. When unfolded, you’re met with a smooth 6.9-inch Extreme AMOLED display powered by a 4,800 mAh battery that delivers up to 36 hours of battery life on a single charge.</p><p>As for the cameras, the Motorola Razr with Crystals By Swarovski sports a dual 50MP main camera system. Since this is a foldable, you can close its lid and use these for even more glamorous selfies too.</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="DweKQ4P2DTRrPJ9PV43RKL" name="Motorola Razr with Crystals by Swarovski-3" alt="A close-up shot of the crystal in the hinge of the Motorola Razr with Crystals by Swarovski" src="https://cdn.mos.cms.futurecdn.net/DweKQ4P2DTRrPJ9PV43RKL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While there are crystals throughout the diamond-shaped pattern around back, the one that really stuck out to me is embedded in the device’s hinge. Likewise, there are also three crystals across the top of the phone’s smaller outer display.</p><h2 id="style-beyond-the-fold">Style beyond the 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9zwMtzRAwKNgdsLfBseu9Q" name="Motorola Razr with Crystals by Swarovski-6" alt="The Motorola Razr with Crystals by Swarovski on display at IFA 2026" src="https://cdn.mos.cms.futurecdn.net/9zwMtzRAwKNgdsLfBseu9Q-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Foldables are certainly becoming more mainstream as we saw with the recent release of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Fold 8</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Fold 8 Ultra</a>. Then with the foldable <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-exclusive-gurman-on-price-release-date-and-secret-weapon-versus-android">iPhone Ultra</a> on the horizon, I expect we’ll soon see more foldables while out and about than ever before. However, even that phone won’t turn heads like the Motorola Razr with Crystals by Swarovski.</p><p>So what does this crystal-studded foldable cost? A lot less than you’d think actually. While we’ve seen custom-made iPhones covered in gems before which start at $10K and go all the way up to the hundreds of thousands of dollars, Motorola is selling this one for just $899.</p><p>The latest device from Motorola’s Brilliant Collection will be available in select markets in North America, Europe, the Middle East, Turkey, Africa and Latin America soon, though we don’t have an exact release date.</p><p>The Motorola Razr with Crystals by Swarovski certainly won’t be for everyone but if you want a phone that stands out from the crowd while looking absolutely stunning doing so, this is the one to get.</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/motorola-phones/motorola-2026-foldables-compared-book-style-powerhouse-vs-elite-compact-flip"><strong>Motorola 2026 foldables compared: book-style powerhouse vs elite compact flip</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-tested-every-major-foldable-phone-this-year-and-the-iphone-ultra-can-beat-them-all-with-this-one-killer-feature"><strong>I've tested every major foldable phone this year, and the iPhone Ultra can beat them all with this one killer feature</strong></a></li><li><a href="https://www.tomsguide.com/phones/android-phones/i-pushed-the-latest-foldables-from-samsung-motorola-and-honor-into-a-no-mercy-battle-royale-and-there-can-be-only-one-winner"><strong>I pushed the latest foldables from Samsung, Motorola and Honor into a no‑mercy battle royale and there was one clear winner</strong></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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-320-70.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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[ iPhone Ultra vs. Galaxy Z Fold 8 Ultra — here's the flagship foldable I'd recommend based on the rumors ]]></title>
                                                                                                <dc:content><![CDATA[ <p>This has been an amazing year for foldables. Now more than ever, fierce competition is forcing phone makers to innovate at a rapid pace. With the <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-rumors-everything-you-need-to-know-about-the-foldable-iphone">iPhone Ultra</a> poised to make its debut at Apple’s upcoming <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">“surprise and shine”</a> event in just over a week, it will no doubt go toe-to-toe against the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review#section-samsung-galaxy-z-fold-8-ultra-review-the-ups">Galaxy Z Fold 8 Ultra</a>.</p><p>That’s why I’m exploring the iPhone Ultra vs. Galaxy Z Fold 8 Ultra matchup, breaking down what the latest leaks and rumors reveal about Apple’s upcoming foldable. Then, I’ll detail how it stacks up against what I’ve tested and experienced with the Galaxy Z Fold 8 Ultra — all to see which one truly deserves the title of <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phone</a>.</p><h2 id="a-form-factor-preference">A form-factor preference</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2955px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MrDnXiJSzcsUQ9GoBW5XEX" name="Galaxy Z Fold 8-28" alt="Galaxy Z Fold 8 and Z Fold 8 Ultra shown side to side." src="https://cdn.mos.cms.futurecdn.net/MrDnXiJSzcsUQ9GoBW5XEX-1920-80.jpg" mos="" align="middle" fullscreen="" width="2955" height="1662" 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 and arguably biggest difference between them is the form factor. While the Galaxy Z Fold 8 Ultra sets a high bar with its remarkably thin, lightweight build, ergonomics often come down to aspect ratio. The taller profile of Samsung's foldable line contrasts sharply with the broader, passport-like shape rumored for Apple's debut.</p><p>Leaks and renders indicate Apple is embracing a <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-dummy-unit-leaks-and-im-not-sure-how-i-feel-about-this-design-heres-why">wider footprint for the iPhone Ultra</a>, which fundamentally changes day-to-day usability. When closed, that shorter, stouter profile should make one-handed operation far more comfortable, unlike the Galaxy Z Fold 8 Ultra, where reaching the top corners of the cover display remains a stretch. Unfolded, the iPhone Ultra’s rumored 4:3 main screen offers a natural, book-like canvas that excels for split-screen multitasking and reading.</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="CV8CramvBjfpAfueojWvvS" name="iPhone Fold mockup" alt="iPhone Fold 3D printed mockup showing front screen and back of device" src="https://cdn.mos.cms.futurecdn.net/CV8CramvBjfpAfueojWvvS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Subsy @ MakerWorld)</span></figcaption></figure><p>Dimensions will play a major role as well. While Apple is tipped to make the iPhone Ultra roughly 4.8mm thin when unfolded with a weight between 8.1 and 8.5 ounces, the Galaxy Z Fold 8 Ultra holds the edge on raw numbers at 4.22mm thin and just 7.8 ounces.</p><p>Even so, I’d gladly trade a fraction of a millimeter and a few grams for the iPhone Ultra’s broader silhouette and superior everyday practicality.</p><h2 id="crease-less-display-i-39-ll-believe-it-when-i-see-it">Crease-less display: I'll believe it when I see 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:1876px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="dAKjscCtnwCaSP4hgKFape" name="Galaxy Z Fold 8 Ultra-5" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dAKjscCtnwCaSP4hgKFape-1920-80.jpg" mos="" align="middle" fullscreen="" width="1876" height="1055" 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>Eliminating the display crease has long been the holy grail of foldable engineering. While Samsung has steadily refined the technology with each generation, the seam still persists. Frankly, though, the Galaxy Z Fold 8 Ultra’s crease doesn't bother me — it has never hindered me from watching videos, multitasking, or running apps.</p><p>Rumors suggest Apple is attempting to achieve the impossible with a <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-invisible-crease-sounds-great-but-this-is-the-feature-apple-cant-afford-to-ignore">virtually invisible crease on the iPhone Ultra</a>. If Apple genuinely manages to deliver a completely flat, crease-free panel out of the gate, it would be an engineering triumph that instantly resets industry benchmarks and puts every other foldable maker on notice.</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="cLJg47oNbZQTPJwitNVmte" name="iPhone Ultra half open Apple Track 1" alt="iPhone Ultra half folded in hand" src="https://cdn.mos.cms.futurecdn.net/cLJg47oNbZQTPJwitNVmte-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple Track)</span></figcaption></figure><p>Still, I can’t help questioning the physics of bending ultra-thin glass thousands of times without wear and tear eventually leaving a trace. More importantly, the practical reality is that absolute perfection simply <em>isn't </em>necessary.</p><p>Samsung has refined the Galaxy Z Fold 8 Ultra’s hinge and teardrop display structure so effectively that its shallow crease disappears when viewing the screen straight on. Sure, I can still feel a subtle dip under my finger or catch a stray reflection off-axis, but in everyday use, it’s far from a deal breaker.</p><p>If Apple pulls off a miracle, kudos to them  —but for most buyers, living with a minor crease is hardly a sacrifice.</p><h2 id="camera-versatility">Camera versatility</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3143px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zQ46AeP4vRip5VZLsQx77F" name="Galaxy Z Fold 8 Ultra review-4" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/zQ46AeP4vRip5VZLsQx77F-1920-80.jpg" mos="" align="middle" fullscreen="" width="3143" height="1768" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When it comes to cameras, the Galaxy Z Fold 8 Ultra holds the upper hand in both hardware and software. Leaks strongly suggest the iPhone Ultra will settle for a dual-camera system — a 48MP main sensor paired with a 48MP ultrawide — leaving out a dedicated telephoto lens entirely.</p><p>I know first-hand that Apple’s computational photography and color science are stellar. Time after time in my photo shootouts, iPhones prove to be front leading contenders for the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phone</a> title. For effortless point-and-shoot reliability, Apple rarely misses.</p><p>However, the Galaxy Z Fold 8 Ultra offers the sheer versatility that serious photographers and mobile creators like me crave. Samsung didn't compromise on hardware, packing a triple-lens system headlined by a massive 200MP main sensor, a 50MP ultrawide, and a dedicated 10MP 3x telephoto lens. </p><p>That optical reach makes a noticeable difference when framing distant subjects without sacrificing clarity — something my colleagues demonstrated clearly in their <a href="https://www.tomsguide.com/phones/samsung-phones/how-ultra-are-the-galaxy-z-fold-8-ultras-cameras-i-put-them-to-the-test-against-the-galaxy-s26-ultra">Galaxy Z Fold 8 vs. Galaxy Z Fold 8 Ultra camera shootout</a>.</p><p>Beyond the lenses, Samsung’s software ecosystem provides a deeper roster of creative tools. Features like <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-did-the-impossible-with-the-galaxy-s26-ultra-i-cant-decide-which-of-these-two-new-features-i-like-more">Horizon Lock</a> keep action shots level during rapid movement, while full Pro Video and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-phones-have-a-hidden-camera-mode-and-its-totally-transformed-my-photos">Expert RAW modes</a> grant granular manual control over shutter speed, ISO, and white balance. While I have no doubt the iPhone Ultra will capture gorgeous images, the Z Fold 8 Ultra is the clear winner for creative flexibility.</p><h2 id="power-and-battery">Power and battery</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3384px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="DsnjPkJpoiWkgqzpb69L5F" name="Galaxy Z Fold 8 Ultra review-23" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/DsnjPkJpoiWkgqzpb69L5F-1920-80.jpg" mos="" align="middle" fullscreen="" width="3384" height="1904" 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>Foldable phones are simply more demanding than your average slab, so performance can’t be shorthanded. I’ve seen how incredibly finessed Samsung’s foldable is with a Snapdragon 8 Elite for Galaxy running under the hood. Benchmark performance scores prove it’s already a beast, which puts pressure on Apple to succeed with its rumored, next-gen <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-tipped-for-a20-pro-chip-apples-first-2nm-processor-to-power-new-foldable-phone">A20 Pro chip</a> that's supposedly using a 2nm manufacturing process. I don’t doubt that the A20 Pro will give the Snapdragon 8 Elite Gen 5 a run for its money, but history has shown me this isn’t a significant buying decision.</p><p>What I will say, though, is the class-leading performance of the Z Fold 8 Ultra’s battery life. Packed with a 5,000 mAh battery, it sets a high bar for the iPhone Ultra because the Fold 8 Ultra recorded a time of <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">14 hours and 33 minutes on Tom’s Guide’s battery drain test</a>. That’s more than 2 hours longer than what we recorded with the <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-ditched-my-iphone-for-the-z-fold-8-android-17s-new-migration-tool-is-pure-magic-but-there-is-one-painful-catch">Galaxy Z Fold 8</a>.</p><p>Apple’s reportedly going to lean on a split-battery design totaling around 4,883 mAh. While that capacity is slightly smaller than Samsung's cell, it’ll ultimately come down to Apple’s unmatched silicon efficiency and aggressive iOS background power management could level the playing field.</p><h2 id="the-true-dark-horse-is-the-software">The true dark horse is the software</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="BwFTXNUWDT3Up6pYASCnEg" name="Galaxy Z Fold 8 Ultra-17" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/BwFTXNUWDT3Up6pYASCnEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While hardware upgrades often grab the headlines, software optimization remains the real battleground for foldables — and it’s where Apple could quietly land a major blow. Even after years of development, Google and Samsung still wrestle with app scaling across irregular foldable aspect ratios.</p><p>I know this first-hand from playing some of my favorite games. While a title might scale properly on the cover display, opening the main screen — or simply rotating the device — frequently produces stretched-out layouts that fail to showcase the true benefits of a foldable screen.</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="AVYypSVaahdG6ut8smhmHA" name="Galaxy Z Fold 7" alt="Galaxy Z Fold 7 review." src="https://cdn.mos.cms.futurecdn.net/AVYypSVaahdG6ut8smhmHA-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>If Apple enforces its strict developer guidelines and leverages a familiar iPad-like aspect ratio, the iPhone Ultra could deliver seamless app scaling out of the gate, taking full advantage of every square millimeter.</p><p>Still, Samsung has proven that raw productivity remains its top priority. The Galaxy Z Fold 8 Ultra effortlessly runs up to four apps simultaneously, while <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">Samsung DeX</a> elevates the hardware into a true desktop-like workstation when connected to an external monitor. It sets a towering standard for mobile productivity — and I'm eager to see whether Apple can counter with a comparable multitasking solution.</p><h2 id="outlook">Outlook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="LBXk5HHdP7Dq6ZSQVtvXFG" name="iPhone Ultra" alt="iPhone Ultra against colorful background." src="https://cdn.mos.cms.futurecdn.net/LBXk5HHdP7Dq6ZSQVtvXFG-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Price will ultimately be the elephant in the room for this matchup. While the Galaxy Z Fold 8 Ultra already commands a staggering $2,099 premium, early leaks and analyst projections suggest the iPhone Ultra could blow past that threshold—potentially landing anywhere between $2,000 and upwards of $2,500. That’s an eye-watering figure that's difficult to stomach for any smartphone, regardless of pedigree.</p><p>Yet, if Apple executes on its core hardware and software promises, the iPhone Ultra might just justify that astronomical investment over Samsung’s latest flagship.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5AKnW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5AKnW.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/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/iphones/iphone-ultra-vs-galaxy-z-fold-8-ultra-heres-the-flagship-foldable-id-recommend</link>
                                                                            <description>
                            <![CDATA[ I break down an iPhone Ultra vs. Galaxy Z Fold Ultra comparison to find out which foldable phone could earn my money as the better foldable device. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4nNY6HzmMCUbWQ5yyrukPe</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NUTTQajf9ScAinbNhcFzUH-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 31 Aug 2026 05:00:00 +0000</pubDate>                                                                                                                                <updated>Mon, 31 Aug 2026 11:33:33 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Samsung 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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NUTTQajf9ScAinbNhcFzUH-1280-80.jpg">
                                                            <media:credit><![CDATA[Majin Bu via X / Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Ultra vs Galaxy Z Fold 8 Ultra]]></media:description>                                                            <media:text><![CDATA[iPhone Ultra vs Galaxy Z Fold 8 Ultra]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Ultra vs Galaxy Z Fold 8 Ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NUTTQajf9ScAinbNhcFzUH-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This has been an amazing year for foldables. Now more than ever, fierce competition is forcing phone makers to innovate at a rapid pace. With the <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-rumors-everything-you-need-to-know-about-the-foldable-iphone">iPhone Ultra</a> poised to make its debut at Apple’s upcoming <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">“surprise and shine”</a> event in just over a week, it will no doubt go toe-to-toe against the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review#section-samsung-galaxy-z-fold-8-ultra-review-the-ups">Galaxy Z Fold 8 Ultra</a>.</p><p>That’s why I’m exploring the iPhone Ultra vs. Galaxy Z Fold 8 Ultra matchup, breaking down what the latest leaks and rumors reveal about Apple’s upcoming foldable. Then, I’ll detail how it stacks up against what I’ve tested and experienced with the Galaxy Z Fold 8 Ultra — all to see which one truly deserves the title of <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phone</a>.</p><h2 id="a-form-factor-preference">A form-factor preference</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2955px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MrDnXiJSzcsUQ9GoBW5XEX" name="Galaxy Z Fold 8-28" alt="Galaxy Z Fold 8 and Z Fold 8 Ultra shown side to side." src="https://cdn.mos.cms.futurecdn.net/MrDnXiJSzcsUQ9GoBW5XEX-1920-80.jpg" mos="" align="middle" fullscreen="" width="2955" height="1662" 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 and arguably biggest difference between them is the form factor. While the Galaxy Z Fold 8 Ultra sets a high bar with its remarkably thin, lightweight build, ergonomics often come down to aspect ratio. The taller profile of Samsung's foldable line contrasts sharply with the broader, passport-like shape rumored for Apple's debut.</p><p>Leaks and renders indicate Apple is embracing a <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-dummy-unit-leaks-and-im-not-sure-how-i-feel-about-this-design-heres-why">wider footprint for the iPhone Ultra</a>, which fundamentally changes day-to-day usability. When closed, that shorter, stouter profile should make one-handed operation far more comfortable, unlike the Galaxy Z Fold 8 Ultra, where reaching the top corners of the cover display remains a stretch. Unfolded, the iPhone Ultra’s rumored 4:3 main screen offers a natural, book-like canvas that excels for split-screen multitasking and reading.</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="CV8CramvBjfpAfueojWvvS" name="iPhone Fold mockup" alt="iPhone Fold 3D printed mockup showing front screen and back of device" src="https://cdn.mos.cms.futurecdn.net/CV8CramvBjfpAfueojWvvS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Subsy @ MakerWorld)</span></figcaption></figure><p>Dimensions will play a major role as well. While Apple is tipped to make the iPhone Ultra roughly 4.8mm thin when unfolded with a weight between 8.1 and 8.5 ounces, the Galaxy Z Fold 8 Ultra holds the edge on raw numbers at 4.22mm thin and just 7.8 ounces.</p><p>Even so, I’d gladly trade a fraction of a millimeter and a few grams for the iPhone Ultra’s broader silhouette and superior everyday practicality.</p><h2 id="crease-less-display-i-39-ll-believe-it-when-i-see-it">Crease-less display: I'll believe it when I see 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:1876px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="dAKjscCtnwCaSP4hgKFape" name="Galaxy Z Fold 8 Ultra-5" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dAKjscCtnwCaSP4hgKFape-1920-80.jpg" mos="" align="middle" fullscreen="" width="1876" height="1055" 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>Eliminating the display crease has long been the holy grail of foldable engineering. While Samsung has steadily refined the technology with each generation, the seam still persists. Frankly, though, the Galaxy Z Fold 8 Ultra’s crease doesn't bother me — it has never hindered me from watching videos, multitasking, or running apps.</p><p>Rumors suggest Apple is attempting to achieve the impossible with a <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-invisible-crease-sounds-great-but-this-is-the-feature-apple-cant-afford-to-ignore">virtually invisible crease on the iPhone Ultra</a>. If Apple genuinely manages to deliver a completely flat, crease-free panel out of the gate, it would be an engineering triumph that instantly resets industry benchmarks and puts every other foldable maker on notice.</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="cLJg47oNbZQTPJwitNVmte" name="iPhone Ultra half open Apple Track 1" alt="iPhone Ultra half folded in hand" src="https://cdn.mos.cms.futurecdn.net/cLJg47oNbZQTPJwitNVmte-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple Track)</span></figcaption></figure><p>Still, I can’t help questioning the physics of bending ultra-thin glass thousands of times without wear and tear eventually leaving a trace. More importantly, the practical reality is that absolute perfection simply <em>isn't </em>necessary.</p><p>Samsung has refined the Galaxy Z Fold 8 Ultra’s hinge and teardrop display structure so effectively that its shallow crease disappears when viewing the screen straight on. Sure, I can still feel a subtle dip under my finger or catch a stray reflection off-axis, but in everyday use, it’s far from a deal breaker.</p><p>If Apple pulls off a miracle, kudos to them  —but for most buyers, living with a minor crease is hardly a sacrifice.</p><h2 id="camera-versatility">Camera versatility</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3143px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zQ46AeP4vRip5VZLsQx77F" name="Galaxy Z Fold 8 Ultra review-4" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/zQ46AeP4vRip5VZLsQx77F-1920-80.jpg" mos="" align="middle" fullscreen="" width="3143" height="1768" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When it comes to cameras, the Galaxy Z Fold 8 Ultra holds the upper hand in both hardware and software. Leaks strongly suggest the iPhone Ultra will settle for a dual-camera system — a 48MP main sensor paired with a 48MP ultrawide — leaving out a dedicated telephoto lens entirely.</p><p>I know first-hand that Apple’s computational photography and color science are stellar. Time after time in my photo shootouts, iPhones prove to be front leading contenders for the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phone</a> title. For effortless point-and-shoot reliability, Apple rarely misses.</p><p>However, the Galaxy Z Fold 8 Ultra offers the sheer versatility that serious photographers and mobile creators like me crave. Samsung didn't compromise on hardware, packing a triple-lens system headlined by a massive 200MP main sensor, a 50MP ultrawide, and a dedicated 10MP 3x telephoto lens. </p><p>That optical reach makes a noticeable difference when framing distant subjects without sacrificing clarity — something my colleagues demonstrated clearly in their <a href="https://www.tomsguide.com/phones/samsung-phones/how-ultra-are-the-galaxy-z-fold-8-ultras-cameras-i-put-them-to-the-test-against-the-galaxy-s26-ultra">Galaxy Z Fold 8 vs. Galaxy Z Fold 8 Ultra camera shootout</a>.</p><p>Beyond the lenses, Samsung’s software ecosystem provides a deeper roster of creative tools. Features like <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-did-the-impossible-with-the-galaxy-s26-ultra-i-cant-decide-which-of-these-two-new-features-i-like-more">Horizon Lock</a> keep action shots level during rapid movement, while full Pro Video and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-phones-have-a-hidden-camera-mode-and-its-totally-transformed-my-photos">Expert RAW modes</a> grant granular manual control over shutter speed, ISO, and white balance. While I have no doubt the iPhone Ultra will capture gorgeous images, the Z Fold 8 Ultra is the clear winner for creative flexibility.</p><h2 id="power-and-battery">Power and battery</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3384px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="DsnjPkJpoiWkgqzpb69L5F" name="Galaxy Z Fold 8 Ultra review-23" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/DsnjPkJpoiWkgqzpb69L5F-1920-80.jpg" mos="" align="middle" fullscreen="" width="3384" height="1904" 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>Foldable phones are simply more demanding than your average slab, so performance can’t be shorthanded. I’ve seen how incredibly finessed Samsung’s foldable is with a Snapdragon 8 Elite for Galaxy running under the hood. Benchmark performance scores prove it’s already a beast, which puts pressure on Apple to succeed with its rumored, next-gen <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-tipped-for-a20-pro-chip-apples-first-2nm-processor-to-power-new-foldable-phone">A20 Pro chip</a> that's supposedly using a 2nm manufacturing process. I don’t doubt that the A20 Pro will give the Snapdragon 8 Elite Gen 5 a run for its money, but history has shown me this isn’t a significant buying decision.</p><p>What I will say, though, is the class-leading performance of the Z Fold 8 Ultra’s battery life. Packed with a 5,000 mAh battery, it sets a high bar for the iPhone Ultra because the Fold 8 Ultra recorded a time of <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">14 hours and 33 minutes on Tom’s Guide’s battery drain test</a>. That’s more than 2 hours longer than what we recorded with the <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-ditched-my-iphone-for-the-z-fold-8-android-17s-new-migration-tool-is-pure-magic-but-there-is-one-painful-catch">Galaxy Z Fold 8</a>.</p><p>Apple’s reportedly going to lean on a split-battery design totaling around 4,883 mAh. While that capacity is slightly smaller than Samsung's cell, it’ll ultimately come down to Apple’s unmatched silicon efficiency and aggressive iOS background power management could level the playing field.</p><h2 id="the-true-dark-horse-is-the-software">The true dark horse is the software</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="BwFTXNUWDT3Up6pYASCnEg" name="Galaxy Z Fold 8 Ultra-17" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/BwFTXNUWDT3Up6pYASCnEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While hardware upgrades often grab the headlines, software optimization remains the real battleground for foldables — and it’s where Apple could quietly land a major blow. Even after years of development, Google and Samsung still wrestle with app scaling across irregular foldable aspect ratios.</p><p>I know this first-hand from playing some of my favorite games. While a title might scale properly on the cover display, opening the main screen — or simply rotating the device — frequently produces stretched-out layouts that fail to showcase the true benefits of a foldable screen.</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="AVYypSVaahdG6ut8smhmHA" name="Galaxy Z Fold 7" alt="Galaxy Z Fold 7 review." src="https://cdn.mos.cms.futurecdn.net/AVYypSVaahdG6ut8smhmHA-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>If Apple enforces its strict developer guidelines and leverages a familiar iPad-like aspect ratio, the iPhone Ultra could deliver seamless app scaling out of the gate, taking full advantage of every square millimeter.</p><p>Still, Samsung has proven that raw productivity remains its top priority. The Galaxy Z Fold 8 Ultra effortlessly runs up to four apps simultaneously, while <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">Samsung DeX</a> elevates the hardware into a true desktop-like workstation when connected to an external monitor. It sets a towering standard for mobile productivity — and I'm eager to see whether Apple can counter with a comparable multitasking solution.</p><h2 id="outlook">Outlook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="LBXk5HHdP7Dq6ZSQVtvXFG" name="iPhone Ultra" alt="iPhone Ultra against colorful background." src="https://cdn.mos.cms.futurecdn.net/LBXk5HHdP7Dq6ZSQVtvXFG-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Price will ultimately be the elephant in the room for this matchup. While the Galaxy Z Fold 8 Ultra already commands a staggering $2,099 premium, early leaks and analyst projections suggest the iPhone Ultra could blow past that threshold—potentially landing anywhere between $2,000 and upwards of $2,500. That’s an eye-watering figure that's difficult to stomach for any smartphone, regardless of pedigree.</p><p>Yet, if Apple executes on its core hardware and software promises, the iPhone Ultra might just justify that astronomical investment over Samsung’s latest flagship.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5AKnW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5AKnW.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/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[ Samsung Galaxy S26 FE is proof that Samsung should kill its 'Fan Edition' phones — here's why ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Earlier this week Samsung announced the<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review"> Galaxy S26 FE</a>, a cut-price flagship phone that sits somewhere between the $899 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and the $549 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Galaxy A57</a>. The general idea being that you get more flagship features without necessarily having to cough up the full price of a premium device.</p><p>Unfortunately, the small amount of time I've spent with the Galaxy S26 FE suggests that Samsung has fumbled the release of the new phone. We shouldn't really be surprised, considering how lackluster the last few Fan Edition releases have been. We're at the point now where it's time for Samsung to scrap the whole line-up and let the A-series step up to the plate.</p><h2 id="too-expensive-to-be-cheap-too-compromised-to-rival-flagships">Too expensive to be cheap, too compromised to rival flagships</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="CDZvxkY9W9Mkvvi7BnBpiR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/CDZvxkY9W9Mkvvi7BnBpiR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The Fan Edition series has always been about lowering the price but making cuts elsewhere. You can't have the same specs as a Galaxy S26 for a lower price, because that's just not economical. That typically manifests itself in worse cameras, cheaper materials and slightly worse performance. </p><p>In the case of the Galaxy S26 FE, those compromises come in three key areas: the screen, the camera and the performance. This is not a phone that has the latest flagship Snapdragon chips, nor does it have the latest <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Exynos 2600 chip that powers international variants of the S26</a>. Instead it has the Exynos 2500, which was released last year, alongside 8GB of RAM rather than the now-standard 12GB.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galaxy S26 FE</strong></p></td><td  ><p><strong>Samsung Galaxy S26</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td><td  ><p>$899</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td><td  ><p>6.3-inch AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>120Hz</p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Exynos 2500</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy (US-only) / Exynos 2600</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td><td  ><p>12GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128 GB / 256GB / 512GB</p></td><td  ><p>256GB / 512GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td><td  ><p>50MP( f/1.8) main, 12MP (f/2.2) ultrawide, 10MP (f/2.4) telephoto w/3x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td><td  ><p>12MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,900 mAh</p></td><td  ><p>4,300 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td><td  ><p>25W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td><td  ><p>5.89 x 2.82 x 0.28 inches (149.6 x 71.7 x 7.2 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td><td  ><p>Cobalt Violet, Sky Blue, Black, White (online exclusive: Silver Shadow, Pink Gold)</p></td></tr></tbody></table></div><p>Admittedly, on paper, the lower specs on the S26 FE don't seem too bad or different from that of the standard S26. It's little things that help drop the price tag, such as weaker display glass, lower resolution telephoto lenses, and the loss of premium materials like the shiny matte glass back panels. But these things all add up, and while that keeps the price down, it also makes the S26 FE a much less appealing purchase. </p><p>The starting price of $699, which gets you 128GB of storage, may make this the cheapest Galaxy S26 you can buy, but it's still not particularly cheap as far as smartphones go. Sure, it's almost half the price of something like the Galaxy S26 Ultra, but it doesn't directly fall into the cheaper phone categories like the S57 or A37.</p><p>Easily the worst part of all this is the fact that Samsung has (at the time of writing) discounted the standard Galaxy S26 by $100. This means the cheapest model, with 256GB of storage, can be <a href="https://www.samsung.com/us/smartphones/galaxy-s26/buy/galaxy-s26-256gb-unlocked-sku-sm-s942uzsexaa/" target="_blank">purchased for $799</a>. Meanwhile the 256GB variant of the Galaxy S26 FE is also $799, which means you're getting a worse phone for the same amount of money.</p><p>Sure there is a cheaper storage option that costs $100 less, but is it really worth losing out on everything the S26 has to offer to save that much? In most cases, I'd argue no.</p><h2 id="the-galaxy-a-series-keeps-getting-better">The Galaxy A series keeps getting 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Xs5ZNd73ZWhjVe5hE6rTjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/Xs5ZNd73ZWhjVe5hE6rTjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>As much as the Galaxy S26 FE isn't a huge amount worse than the Galaxy S26, it also doesn't seem to be that much better than the Galaxy A57. In fact Samsung's mid-range phone is one of the <a href="https://www.tomsguide.com/best-picks/best-cheap-phones">best cheap phones</a> you can buy because, despite the sacrifices you inevitably have to make, it's an exceptionally good phone for its price tag.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galaxy S26 FE</strong></p></td><td  ><p><strong>Samsung Galaxy A57</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td><td  ><p>$549</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td><td  ><p>6.7-inch, AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>120Hz</p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Exynos 2500</p></td><td  ><p>Exynos 1680</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128 GB / 256GB / 512GB</p></td><td  ><p>128GB / 256GB / 512GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td><td  ><p>50MP main (f/1.8), 12MP Ultrawide (f/2.2), 5MP Macro (f/2.4)</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,900 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td><td  ><p>45W wired only</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td><td  ><p>6.35 x 3.02 x 0.27 inches (161.5 x 76.8 x 6.9mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td><td  ><p>Navy, Gray, Icyblue, Lilac</p></td></tr></tbody></table></div><p>It's a lot easier to see where the Galaxy A57 made the cuts in contrast to the S26 FE. The main sticking point for me is the <a href="https://www.tomsguide.com/phones/samsung-phones/i-put-samsung-galaxy-a57s-macro-lens-head-to-head-with-galaxy-s26-ultras-macro-mode-and-its-not-even-close">terrible macro camera</a>, which always feels like an absolute waste of hardware compared to a dedicated macro camera mode other smartphones utilize. It also looks a lot cheaper, and the performance hardware is more noticeably inferior.</p><p>It doesn't matter if you don't know anything about phone chips, the fact that the A57 has an Exynos 1680 means it might as well have a giant neon sign declaring that it won't outperform the S26 FE's Exynos 2500.</p><p>That being said, we've been seeing pretty big gains in the mid-range phone market over the past several years. They're starting to feel a lot more premium, and they're coming with AI and software features that you previously wouldn't see outside ultra-premium models. The yearly upgrades aren't exactly stellar, but that seems to be a problem all phones are facing right now — no matter the price point.</p><p>A Galaxy A-series phone is never going to be as good as a flagship S-series, but it still offers a lot of the things you might need from a phone, including solid cameras, battery life and so on. There's even some solid AI features thrown in, if you're the kind of person who really likes using Galaxy AI and Bixby. </p><p>Admittedly, the Fan Edition phones have all done this too, but they also cost more and don't offer as much of a discount compared to other Galaxy S-series phones. </p><h2 id="bottom-line-galaxy-fe-phones-lack-purpose">Bottom line: Galaxy FE phones lack purpose</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="7PPxxLNxP4CVPu4cMAN8iR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/7PPxxLNxP4CVPu4cMAN8iR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Few phone companies take the approach Samsung does when it comes to cheaper-than-flagship phones. In fact, Samsung is the only one I can think of that offers two distinct devices that are meant to sit below the entry level premium model. The likes of Google, Apple, Nothing and others typically only have the one. </p><p>With two devices that sit in such close proximity, from both a price and hardware perspective, differentiating them becomes a much harder task. We end up in a situation where the Galaxy S26 FE feels awkwardly placed in a bizarre, paradoxical middle ground.</p><p>In the past Samsung was a lot more inconsistent about releasing the A50-series phones in the U.S., which arguably gave the Fan Edition release a lot more breathing room. There's clearly demand for a cheaper Galaxy phone, and the lack of competition from itself meant Samsung could continue to push the more premium option. </p><p>These days, it feels like these phones are released out of obligation, rather than a pressing need to actually build them. And it's about time Samsung threw in the towel, and gave the Fan Edition line-up a trip to the farm upstate.</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/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><li><a href="https://www.tomsguide.com/phones/iphones/expert-predicts-iphone-ultras-usd2-500-price-tag-wont-deter-die-hard-fans-it-could-see-10-million-units-sold-in-the-next-year">Expert predicts iPhone Ultra's $2,500 price tag won't deter die-hard fans — it could see 10 million units sold in the next year</a></li><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></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-is-proof-that-samsung-should-kill-its-fan-edition-phones-heres-why</link>
                                                                            <description>
                            <![CDATA[ The Samsung Galaxy S26 FE is proof that the Fan Edition series has outlived its usefulness, and it's time Samsung killed it in favor of the Galaxy A-series instead. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Cg3zWaETQQPq52kAQUQxXF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JNzS5dtCK9PWLodyx8zXjR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 30 Aug 2026 11:00:00 +0000</pubDate>                                                                                                                                <updated>Sun, 30 Aug 2026 22:19:55 +0000</updated>
                                                                                                                                            <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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/JNzS5dtCK9PWLodyx8zXjR-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide / Tom Pritchard]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JNzS5dtCK9PWLodyx8zXjR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Earlier this week Samsung announced the<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review"> Galaxy S26 FE</a>, a cut-price flagship phone that sits somewhere between the $899 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and the $549 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Galaxy A57</a>. The general idea being that you get more flagship features without necessarily having to cough up the full price of a premium device.</p><p>Unfortunately, the small amount of time I've spent with the Galaxy S26 FE suggests that Samsung has fumbled the release of the new phone. We shouldn't really be surprised, considering how lackluster the last few Fan Edition releases have been. We're at the point now where it's time for Samsung to scrap the whole line-up and let the A-series step up to the plate.</p><h2 id="too-expensive-to-be-cheap-too-compromised-to-rival-flagships">Too expensive to be cheap, too compromised to rival flagships</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="CDZvxkY9W9Mkvvi7BnBpiR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/CDZvxkY9W9Mkvvi7BnBpiR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The Fan Edition series has always been about lowering the price but making cuts elsewhere. You can't have the same specs as a Galaxy S26 for a lower price, because that's just not economical. That typically manifests itself in worse cameras, cheaper materials and slightly worse performance. </p><p>In the case of the Galaxy S26 FE, those compromises come in three key areas: the screen, the camera and the performance. This is not a phone that has the latest flagship Snapdragon chips, nor does it have the latest <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Exynos 2600 chip that powers international variants of the S26</a>. Instead it has the Exynos 2500, which was released last year, alongside 8GB of RAM rather than the now-standard 12GB.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galaxy S26 FE</strong></p></td><td  ><p><strong>Samsung Galaxy S26</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td><td  ><p>$899</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td><td  ><p>6.3-inch AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>120Hz</p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Exynos 2500</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy (US-only) / Exynos 2600</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td><td  ><p>12GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128 GB / 256GB / 512GB</p></td><td  ><p>256GB / 512GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td><td  ><p>50MP( f/1.8) main, 12MP (f/2.2) ultrawide, 10MP (f/2.4) telephoto w/3x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td><td  ><p>12MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,900 mAh</p></td><td  ><p>4,300 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td><td  ><p>25W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td><td  ><p>5.89 x 2.82 x 0.28 inches (149.6 x 71.7 x 7.2 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td><td  ><p>Cobalt Violet, Sky Blue, Black, White (online exclusive: Silver Shadow, Pink Gold)</p></td></tr></tbody></table></div><p>Admittedly, on paper, the lower specs on the S26 FE don't seem too bad or different from that of the standard S26. It's little things that help drop the price tag, such as weaker display glass, lower resolution telephoto lenses, and the loss of premium materials like the shiny matte glass back panels. But these things all add up, and while that keeps the price down, it also makes the S26 FE a much less appealing purchase. </p><p>The starting price of $699, which gets you 128GB of storage, may make this the cheapest Galaxy S26 you can buy, but it's still not particularly cheap as far as smartphones go. Sure, it's almost half the price of something like the Galaxy S26 Ultra, but it doesn't directly fall into the cheaper phone categories like the S57 or A37.</p><p>Easily the worst part of all this is the fact that Samsung has (at the time of writing) discounted the standard Galaxy S26 by $100. This means the cheapest model, with 256GB of storage, can be <a href="https://www.samsung.com/us/smartphones/galaxy-s26/buy/galaxy-s26-256gb-unlocked-sku-sm-s942uzsexaa/" target="_blank">purchased for $799</a>. Meanwhile the 256GB variant of the Galaxy S26 FE is also $799, which means you're getting a worse phone for the same amount of money.</p><p>Sure there is a cheaper storage option that costs $100 less, but is it really worth losing out on everything the S26 has to offer to save that much? In most cases, I'd argue no.</p><h2 id="the-galaxy-a-series-keeps-getting-better">The Galaxy A series keeps getting 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Xs5ZNd73ZWhjVe5hE6rTjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/Xs5ZNd73ZWhjVe5hE6rTjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>As much as the Galaxy S26 FE isn't a huge amount worse than the Galaxy S26, it also doesn't seem to be that much better than the Galaxy A57. In fact Samsung's mid-range phone is one of the <a href="https://www.tomsguide.com/best-picks/best-cheap-phones">best cheap phones</a> you can buy because, despite the sacrifices you inevitably have to make, it's an exceptionally good phone for its price tag.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galaxy S26 FE</strong></p></td><td  ><p><strong>Samsung Galaxy A57</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td><td  ><p>$549</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td><td  ><p>6.7-inch, AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>120Hz</p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Exynos 2500</p></td><td  ><p>Exynos 1680</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128 GB / 256GB / 512GB</p></td><td  ><p>128GB / 256GB / 512GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td><td  ><p>50MP main (f/1.8), 12MP Ultrawide (f/2.2), 5MP Macro (f/2.4)</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,900 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td><td  ><p>45W wired only</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td><td  ><p>6.35 x 3.02 x 0.27 inches (161.5 x 76.8 x 6.9mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td><td  ><p>Navy, Gray, Icyblue, Lilac</p></td></tr></tbody></table></div><p>It's a lot easier to see where the Galaxy A57 made the cuts in contrast to the S26 FE. The main sticking point for me is the <a href="https://www.tomsguide.com/phones/samsung-phones/i-put-samsung-galaxy-a57s-macro-lens-head-to-head-with-galaxy-s26-ultras-macro-mode-and-its-not-even-close">terrible macro camera</a>, which always feels like an absolute waste of hardware compared to a dedicated macro camera mode other smartphones utilize. It also looks a lot cheaper, and the performance hardware is more noticeably inferior.</p><p>It doesn't matter if you don't know anything about phone chips, the fact that the A57 has an Exynos 1680 means it might as well have a giant neon sign declaring that it won't outperform the S26 FE's Exynos 2500.</p><p>That being said, we've been seeing pretty big gains in the mid-range phone market over the past several years. They're starting to feel a lot more premium, and they're coming with AI and software features that you previously wouldn't see outside ultra-premium models. The yearly upgrades aren't exactly stellar, but that seems to be a problem all phones are facing right now — no matter the price point.</p><p>A Galaxy A-series phone is never going to be as good as a flagship S-series, but it still offers a lot of the things you might need from a phone, including solid cameras, battery life and so on. There's even some solid AI features thrown in, if you're the kind of person who really likes using Galaxy AI and Bixby. </p><p>Admittedly, the Fan Edition phones have all done this too, but they also cost more and don't offer as much of a discount compared to other Galaxy S-series phones. </p><h2 id="bottom-line-galaxy-fe-phones-lack-purpose">Bottom line: Galaxy FE phones lack purpose</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="7PPxxLNxP4CVPu4cMAN8iR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/7PPxxLNxP4CVPu4cMAN8iR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Few phone companies take the approach Samsung does when it comes to cheaper-than-flagship phones. In fact, Samsung is the only one I can think of that offers two distinct devices that are meant to sit below the entry level premium model. The likes of Google, Apple, Nothing and others typically only have the one. </p><p>With two devices that sit in such close proximity, from both a price and hardware perspective, differentiating them becomes a much harder task. We end up in a situation where the Galaxy S26 FE feels awkwardly placed in a bizarre, paradoxical middle ground.</p><p>In the past Samsung was a lot more inconsistent about releasing the A50-series phones in the U.S., which arguably gave the Fan Edition release a lot more breathing room. There's clearly demand for a cheaper Galaxy phone, and the lack of competition from itself meant Samsung could continue to push the more premium option. </p><p>These days, it feels like these phones are released out of obligation, rather than a pressing need to actually build them. And it's about time Samsung threw in the towel, and gave the Fan Edition line-up a trip to the farm upstate.</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/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><li><a href="https://www.tomsguide.com/phones/iphones/expert-predicts-iphone-ultras-usd2-500-price-tag-wont-deter-die-hard-fans-it-could-see-10-million-units-sold-in-the-next-year">Expert predicts iPhone Ultra's $2,500 price tag won't deter die-hard fans — it could see 10 million units sold in the next year</a></li><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></ul>
                                                            </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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5yziLSE3Tcz7ZqdvbsBNdQ-1920-80.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/fqJUsWfE8XGBDCL6exKFBS-1920-80.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Ww8R8FbwRxNDDPYDacX87S-1920-80.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/CXX6dyokLfaktGhrNuJytR-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5yziLSE3Tcz7ZqdvbsBNdQ-1920-80.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/fqJUsWfE8XGBDCL6exKFBS-1920-80.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Ww8R8FbwRxNDDPYDacX87S-1920-80.jpg" alt="magic capture examples" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/CXX6dyokLfaktGhrNuJytR-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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[ Samsung Galaxy S26 FE hands-on review: I'm not sure if this phone needed to exist ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you're looking for a premium Galaxy smartphone experience, but can't quite justify the cost of a standard <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a>, then Samsung is hoping that the Galaxy S26 FE might be for you. This is the latest in the long line of "Fan Edition" phones and the idea is that Samsung cuts a few features, but in the process offers a near-flagship experience for a lower price.</p><p>The Samsung Galaxy S26 FE certainly does that, though it may take things a little bit too far. I spent a little bit of time with the S26 FE ahead of today's announcement, and started to wonder who this phone is really for. After all, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Samsung Galaxy A57</a> already captures the lower-priced mid-range segment and recent discounts to the standard Galaxy S26 make it more accessible than before. </p><p>The Galaxy S26 FE seems to occupy the same awkward middle ground as its predecessors. The specs aren't good enough to qualify it as a true flagship, but at the same time, it isn't cheap enough to be a true budget option.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-specifications"><span>Samsung Galaxy S26 FE hands-on review: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Galaxy S26 FE</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td></tr><tr><td class="firstcol " ><p><strong>Release date</strong></p></td><td  ><p>September 4</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh rate</strong></p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Exynos 2500</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128GB,  256GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>4,900 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>6.81 ounces (193 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-the-ups"><span>Samsung Galaxy S26 FE hands-on review: The Ups</span></h2><h2 id="the-cost-of-entry-isn-39-t-too-high">The cost of entry isn't too high</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="JNzS5dtCK9PWLodyx8zXjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE in Pistachio held in the hand." src="https://cdn.mos.cms.futurecdn.net/JNzS5dtCK9PWLodyx8zXjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>In a world of price hikes and RAMageddon, it's no surprise that the Galaxy S26 FE is more expensive than the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-fe-review">S25 FE</a>. That said, a $50 price hike isn't actually a lot, and that helps keep the cost of buying into the Galaxy S26 lineup much lower than it was before. The fact that Samsung has kept the 128GB model around means the $699 starting price is $200 less than the standard Galaxy S26 was at launch. </p><p>Admittedly that benefit only really matters if you plan on buying the 128GB model, and can't justify spending an extra $100 more. Why? Because, at the time of writing, Samsung's online store is selling the 256GB Galaxy S26 <a href="https://www.samsung.com/us/smartphones/galaxy-s26/buy/galaxy-s26-256gb-unlocked-sku-sm-s942uzsexaa/" target="_blank" rel="nofollow">for $799</a> — the exact same price as the 256GB S26 FE.</p><p>In other words spending an extra $100 can get you a phone with better hardware. However, if you want to keep costs low and want access to the flagship capabilities of a Galaxy S26, then the FE is an option for you.</p><h2 id="more-premium-than-most-cheap-phones">More premium than most cheap 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="JAFmcNMfu2JRAJVoJ6yYjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE frame closeup." src="https://cdn.mos.cms.futurecdn.net/JAFmcNMfu2JRAJVoJ6yYjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The main benefit for the S26 FE, compared to the likes of the A57, is that you do get a slightly more premium build and feature set. All without having to pay quite as much as you would if you picked up a Galaxy S26 or one of its larger siblings.</p><p>The glossy glass back isn't quite as impressive as the matte glass on the back of the Galaxy S26. Honestly, seeing my own silhouette reflected in the back of the phone instantly made me think of the Galaxy A57, which is a shame when you remember that past FE devices had the matte glass to offer that instantly-premium look.</p><p>Still, the Galaxy S26 FE doesn't really feel cheap. It's reminiscent of the Galaxy S26 Plus due to its size, and there's definitely some weight to it that makes it feel more important than an A-series Galaxy. The brushed metal frame certainly helps in this respect, as does the solid-coloring of the camera bar — a design trait borrowed from other S26 phones.</p><h2 id="great-selection-of-ai-and-software-features">Great selection of AI and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gasM6H8jtNvrZbe8yHJfkR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE display with Now Brief." src="https://cdn.mos.cms.futurecdn.net/gasM6H8jtNvrZbe8yHJfkR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Like any device hoping to be considered close to flagship, the Galaxy S26 FE does come with a huge range of AI features. There's nothing new here, which isn't a huge surprise, but it does come with the best things Galaxy AI has had to offer on other phones — including my favorite <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> feature, <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">My Fan Cam</a>.</p><p>In fact, there are a bunch of cool software features that we've seen on other Galaxy flagships, but still haven't had the option to use on cheaper devices. That includes the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-did-the-impossible-with-the-galaxy-s26-ultra-i-cant-decide-which-of-these-two-new-features-i-like-more">Horizontal Lock</a> video camera mode, the <a href="https://www.tomsguide.com/phones/samsung-phones/i-tested-this-galaxy-s26-ai-feature-to-scan-my-tax-documents-and-it-makes-my-scanner-obsolete">Samsung Document Scanner</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-samsung-galaxy-s25-ultras-audio-eraser-and-it-beats-both-apple-and-google">Audio Eraser</a>, AI-powered photo editing with <a href="https://www.tomsguide.com/phones/i-tested-galaxy-s26-ultra-photo-assist-vs-pixel-10-pro-xl-ask-photos-heres-the-better-ai-photo-editor">Photo Assist</a>, Now Brief, <a href="https://www.tomsguide.com/opinion/circle-to-search-is-my-favorite-galaxy-s24-feature-if-samsung-and-google-dont-screw-it-up">Circle to Search</a> with multi-object recognition, as well as <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">Now Nudge</a> with support for cross-app functionality and third party apps.</p><p>Samsung also promises that the upgraded ProVisual engine is also here. This offers improved low light performance, reducing noise in the photo and lowering the overall color distortion. Though we haven't been able to test this for ourselves just yet.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-the-downs"><span>Samsung Galaxy S26 FE hands-on review: The Downs</span></h2><h2 id="camera-quality-seems-iffy-so-far">Camera quality seems iffy so far</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eQqeSygcj5dPkjB3KDzKiR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE camera closeup." src="https://cdn.mos.cms.futurecdn.net/eQqeSygcj5dPkjB3KDzKiR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>I will caveat this point by making it clear I haven't done any extensive camera testing with the Galaxy S26 FE, but the few sample photos I have taken so far were not very impressive. In fact, the four cameras on the S26 FE seem to struggle when compared to those on the Galaxy A57.</p><p>From a hardware perspective, things are a little disappointing. There's a 50MP main camera, a 12MP ultrawide, 8MP telephoto with 3x optical zoom and a 12MP selfie camera. That's pretty similar to the A57, albeit with a telephoto lens instead of a <a href="https://www.tomsguide.com/phones/samsung-phones/i-put-samsung-galaxy-a57s-macro-lens-head-to-head-with-galaxy-s26-ultras-macro-mode-and-its-not-even-close">crappy 5MP macro lens.</a></p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vpxLMoA6KvPx2arcyY7zrX-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WCnKigwTNm2n5DK97Q8Dym-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>That minor change in third-camera hardware means that there's a big difference in the zoomed in photo I took. Since the A57 relies on its main lens, it's using a higher resolution lens and cropping it down — rather than actually zooming in. The camera defaults to 12MP, and while not great it is obviously higher than what an 8MP lens can accomplish.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vo3z8qCfWTP6LdvinBD2gY-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/D7foBdLzVLax4C6yivpyFn-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Ex3bk6BoGMi6k7qt6vaueY-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/L4T6jf2a8ceWhiHqjYFQTn-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>The main lens on the S26 FE is a little better, with some extra clarity that lets you make out the sugar crystals a little more easily, though it does come out much darker and less vibrant. The same is true when looking at this photo of a plant, with both 50MP lenses offering similar quality — but wildly different brightness levels.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/DBbDV2CUPdED5A3npLmSxW-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/EQJNgPqLNRsoN6f9Etr9sm-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>The selfie camera is a step in the opposite direction, though. While the A57 washed out the color from my face compared to the S26 FE, there's a lot more detail and clarity compared on the cheaper phone. The S26 FE is slightly blurrier, and struggles to pick up the finer details including hair and skin complexion.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/5KtDFkpf7MWbAHMvVLoRzF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/foFYQHsH923d3RCTo2G2VE-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/oRXyFzX2LkA2x94Vk4rhXF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hdqVYMLAdB4QE9UAn5EHGF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure></figure><p>As you'd expect the regular Galaxy S26 outmatches them all, with more true-to-life colors and general clarity exceeding both the A57 and S26 FE. Even if my attempt at a selfie did not come out particularly well during my hands-on time. Still, the fact that the Galaxy A57 manages to offer some serious competition to the S26 FE, despite it being $150 cheaper, is not a good look for the Fan Edition phone.</p><h2 id="upgrades-are-minimal">Upgrades are minimal</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="Xs5ZNd73ZWhjVe5hE6rTjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE against A57 and Galaxy S26." src="https://cdn.mos.cms.futurecdn.net/Xs5ZNd73ZWhjVe5hE6rTjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Incremental upgrades with few major hardware upgrades are not uncommon, and the Galaxy S26 FE seems to be the latest example of that to come from Samsung HQ. Checking over the specs compared to last year's Galaxy S25 FE really highlights how few upgrades there are this year. If you didn't know any better, you could easily mistake the S26 FE for an older model, and only real changes are the newer Exynos chipset and the glass enclosure around the rear camera lenses. </p><p>Everything else, from the cameras to the battery are essentially identical, which means Samsung is relying more on software upgrades to help sell the phone over its predecessors. Which is not a terrible plan, considering the number of flagship features Samsung has added to the Galaxy S26 FE. But it doesn't suggest that the phone is a must-have. Especially when you remember the Galaxy A57 exists.</p><h2 id="the-galaxy-a57-is-right-there">The Galaxy A57 is right there</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="WnVbdoxHAWjSTTJWxanJnR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE and A57 held in the hand." src="https://cdn.mos.cms.futurecdn.net/WnVbdoxHAWjSTTJWxanJnR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The minimal upgrades wouldn't be so bad on their own, but we can't forget the fact that the Galaxy A57 is still around — and costs a good $150 less than the cheapest Galaxy S26 FE. There are a bunch of ways the Galaxy A57 falters compared to the S26 FE, particularly when it comes to performance and the availability of AI features. That price cut has to come from somewhere, and Samsung can't save all that money by cutting premium materials.</p><p>Still, at the same time, the A57 shares a lot of the same hardware with the Galaxy S26 FE. The camera hardware is more or less identical, and puts up a good fight against the S26 FE's cameras, and both screens share the same size, resolution and brightness. The A57's battery is actually larger, weirdly enough, and they both support up to 45W wired charging speeds — though the A57 lacks wireless charging.</p><p>We can't do a full comparison just yet, and we'll need to get the S26 FE into the lab to figure out exactly what its deal is. Because there's only so much you can glean from a list of hardware specs. Still, things don't look great. Especially considering the $50 price hike, and the fact that the 256GB Galaxy S26 costs the same as the equivalent FE.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-outlook"><span>Samsung Galaxy S26 FE hands-on review: 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="GYNd6cPd7ZVnmCg7qSqYjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE in three colors." src="https://cdn.mos.cms.futurecdn.net/GYNd6cPd7ZVnmCg7qSqYjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The Galaxy S26 FE certainly shows promise, I'm struggling to understand why Samsung is releasing it in the first place. The Fan Edition series has been losing relevance for a while, especially now that Samsung is consistently releasing A-series phones in the U.S. and the Galaxy S26 FE doesn't really do much to help salvage the line-up's reputation in any way.</p><p>Based on my limited time with the phone, it seems that it is too similar to the Galaxy A57 to justify the higher price tag. At the same time, the price is too close to that of the Galaxy S26 to make many of these compromises worthwhile. It's that weird middle ground where it's not a cheap phone, but it's too cut back to be a true flagship.</p><p>So who is this phone for? It does offer more AI and Samsung-exclusive software features than cheaper options, and the fact that the 128GB storage option is still around means the cost of entry is noticeably lower. If you're an AI superfan that doesn't have a lot of money, this might be the Samsung phone for you, but otherwise you may as well pick up a different model.</p><p>Of course we'll have a much better idea of what the Galaxy S26 FE can do when we get the phone into the Tom's Guide lab for testing. That could change everything, or it could cement the idea that the S26 FE needs to die. We'll just have to wait and see.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review</link>
                                                                            <description>
                            <![CDATA[ Samsung Galaxy S26 FE is an awkwardly positioned phone that makes too many sacrifices to be truly premium, but costs to much to be considered cheap. Which means it's being overshadowed by existing Galaxy handsets. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">JB2BcFVj7QfNgz6Lrti4T8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UfZndR98frCcHGKwSd2BjR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 27 Aug 2026 12:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 27 Aug 2026 22:47:34 +0000</updated>
                                                                                                                                            <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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/UfZndR98frCcHGKwSd2BjR-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide / Tom Pritchard]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UfZndR98frCcHGKwSd2BjR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you're looking for a premium Galaxy smartphone experience, but can't quite justify the cost of a standard <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a>, then Samsung is hoping that the Galaxy S26 FE might be for you. This is the latest in the long line of "Fan Edition" phones and the idea is that Samsung cuts a few features, but in the process offers a near-flagship experience for a lower price.</p><p>The Samsung Galaxy S26 FE certainly does that, though it may take things a little bit too far. I spent a little bit of time with the S26 FE ahead of today's announcement, and started to wonder who this phone is really for. After all, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Samsung Galaxy A57</a> already captures the lower-priced mid-range segment and recent discounts to the standard Galaxy S26 make it more accessible than before. </p><p>The Galaxy S26 FE seems to occupy the same awkward middle ground as its predecessors. The specs aren't good enough to qualify it as a true flagship, but at the same time, it isn't cheap enough to be a true budget option.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-specifications"><span>Samsung Galaxy S26 FE hands-on review: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Galaxy S26 FE</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td></tr><tr><td class="firstcol " ><p><strong>Release date</strong></p></td><td  ><p>September 4</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh rate</strong></p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Exynos 2500</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128GB,  256GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>4,900 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>6.81 ounces (193 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-the-ups"><span>Samsung Galaxy S26 FE hands-on review: The Ups</span></h2><h2 id="the-cost-of-entry-isn-39-t-too-high">The cost of entry isn't too high</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="JNzS5dtCK9PWLodyx8zXjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE in Pistachio held in the hand." src="https://cdn.mos.cms.futurecdn.net/JNzS5dtCK9PWLodyx8zXjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>In a world of price hikes and RAMageddon, it's no surprise that the Galaxy S26 FE is more expensive than the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-fe-review">S25 FE</a>. That said, a $50 price hike isn't actually a lot, and that helps keep the cost of buying into the Galaxy S26 lineup much lower than it was before. The fact that Samsung has kept the 128GB model around means the $699 starting price is $200 less than the standard Galaxy S26 was at launch. </p><p>Admittedly that benefit only really matters if you plan on buying the 128GB model, and can't justify spending an extra $100 more. Why? Because, at the time of writing, Samsung's online store is selling the 256GB Galaxy S26 <a href="https://www.samsung.com/us/smartphones/galaxy-s26/buy/galaxy-s26-256gb-unlocked-sku-sm-s942uzsexaa/" target="_blank" rel="nofollow">for $799</a> — the exact same price as the 256GB S26 FE.</p><p>In other words spending an extra $100 can get you a phone with better hardware. However, if you want to keep costs low and want access to the flagship capabilities of a Galaxy S26, then the FE is an option for you.</p><h2 id="more-premium-than-most-cheap-phones">More premium than most cheap 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="JAFmcNMfu2JRAJVoJ6yYjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE frame closeup." src="https://cdn.mos.cms.futurecdn.net/JAFmcNMfu2JRAJVoJ6yYjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The main benefit for the S26 FE, compared to the likes of the A57, is that you do get a slightly more premium build and feature set. All without having to pay quite as much as you would if you picked up a Galaxy S26 or one of its larger siblings.</p><p>The glossy glass back isn't quite as impressive as the matte glass on the back of the Galaxy S26. Honestly, seeing my own silhouette reflected in the back of the phone instantly made me think of the Galaxy A57, which is a shame when you remember that past FE devices had the matte glass to offer that instantly-premium look.</p><p>Still, the Galaxy S26 FE doesn't really feel cheap. It's reminiscent of the Galaxy S26 Plus due to its size, and there's definitely some weight to it that makes it feel more important than an A-series Galaxy. The brushed metal frame certainly helps in this respect, as does the solid-coloring of the camera bar — a design trait borrowed from other S26 phones.</p><h2 id="great-selection-of-ai-and-software-features">Great selection of AI and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gasM6H8jtNvrZbe8yHJfkR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE display with Now Brief." src="https://cdn.mos.cms.futurecdn.net/gasM6H8jtNvrZbe8yHJfkR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Like any device hoping to be considered close to flagship, the Galaxy S26 FE does come with a huge range of AI features. There's nothing new here, which isn't a huge surprise, but it does come with the best things Galaxy AI has had to offer on other phones — including my favorite <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> feature, <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">My Fan Cam</a>.</p><p>In fact, there are a bunch of cool software features that we've seen on other Galaxy flagships, but still haven't had the option to use on cheaper devices. That includes the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-did-the-impossible-with-the-galaxy-s26-ultra-i-cant-decide-which-of-these-two-new-features-i-like-more">Horizontal Lock</a> video camera mode, the <a href="https://www.tomsguide.com/phones/samsung-phones/i-tested-this-galaxy-s26-ai-feature-to-scan-my-tax-documents-and-it-makes-my-scanner-obsolete">Samsung Document Scanner</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-samsung-galaxy-s25-ultras-audio-eraser-and-it-beats-both-apple-and-google">Audio Eraser</a>, AI-powered photo editing with <a href="https://www.tomsguide.com/phones/i-tested-galaxy-s26-ultra-photo-assist-vs-pixel-10-pro-xl-ask-photos-heres-the-better-ai-photo-editor">Photo Assist</a>, Now Brief, <a href="https://www.tomsguide.com/opinion/circle-to-search-is-my-favorite-galaxy-s24-feature-if-samsung-and-google-dont-screw-it-up">Circle to Search</a> with multi-object recognition, as well as <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">Now Nudge</a> with support for cross-app functionality and third party apps.</p><p>Samsung also promises that the upgraded ProVisual engine is also here. This offers improved low light performance, reducing noise in the photo and lowering the overall color distortion. Though we haven't been able to test this for ourselves just yet.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-the-downs"><span>Samsung Galaxy S26 FE hands-on review: The Downs</span></h2><h2 id="camera-quality-seems-iffy-so-far">Camera quality seems iffy so far</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eQqeSygcj5dPkjB3KDzKiR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE camera closeup." src="https://cdn.mos.cms.futurecdn.net/eQqeSygcj5dPkjB3KDzKiR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>I will caveat this point by making it clear I haven't done any extensive camera testing with the Galaxy S26 FE, but the few sample photos I have taken so far were not very impressive. In fact, the four cameras on the S26 FE seem to struggle when compared to those on the Galaxy A57.</p><p>From a hardware perspective, things are a little disappointing. There's a 50MP main camera, a 12MP ultrawide, 8MP telephoto with 3x optical zoom and a 12MP selfie camera. That's pretty similar to the A57, albeit with a telephoto lens instead of a <a href="https://www.tomsguide.com/phones/samsung-phones/i-put-samsung-galaxy-a57s-macro-lens-head-to-head-with-galaxy-s26-ultras-macro-mode-and-its-not-even-close">crappy 5MP macro lens.</a></p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vpxLMoA6KvPx2arcyY7zrX-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WCnKigwTNm2n5DK97Q8Dym-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>That minor change in third-camera hardware means that there's a big difference in the zoomed in photo I took. Since the A57 relies on its main lens, it's using a higher resolution lens and cropping it down — rather than actually zooming in. The camera defaults to 12MP, and while not great it is obviously higher than what an 8MP lens can accomplish.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vo3z8qCfWTP6LdvinBD2gY-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/D7foBdLzVLax4C6yivpyFn-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Ex3bk6BoGMi6k7qt6vaueY-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/L4T6jf2a8ceWhiHqjYFQTn-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>The main lens on the S26 FE is a little better, with some extra clarity that lets you make out the sugar crystals a little more easily, though it does come out much darker and less vibrant. The same is true when looking at this photo of a plant, with both 50MP lenses offering similar quality — but wildly different brightness levels.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/DBbDV2CUPdED5A3npLmSxW-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/EQJNgPqLNRsoN6f9Etr9sm-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>The selfie camera is a step in the opposite direction, though. While the A57 washed out the color from my face compared to the S26 FE, there's a lot more detail and clarity compared on the cheaper phone. The S26 FE is slightly blurrier, and struggles to pick up the finer details including hair and skin complexion.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/5KtDFkpf7MWbAHMvVLoRzF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/foFYQHsH923d3RCTo2G2VE-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/oRXyFzX2LkA2x94Vk4rhXF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hdqVYMLAdB4QE9UAn5EHGF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure></figure><p>As you'd expect the regular Galaxy S26 outmatches them all, with more true-to-life colors and general clarity exceeding both the A57 and S26 FE. Even if my attempt at a selfie did not come out particularly well during my hands-on time. Still, the fact that the Galaxy A57 manages to offer some serious competition to the S26 FE, despite it being $150 cheaper, is not a good look for the Fan Edition phone.</p><h2 id="upgrades-are-minimal">Upgrades are minimal</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="Xs5ZNd73ZWhjVe5hE6rTjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE against A57 and Galaxy S26." src="https://cdn.mos.cms.futurecdn.net/Xs5ZNd73ZWhjVe5hE6rTjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Incremental upgrades with few major hardware upgrades are not uncommon, and the Galaxy S26 FE seems to be the latest example of that to come from Samsung HQ. Checking over the specs compared to last year's Galaxy S25 FE really highlights how few upgrades there are this year. If you didn't know any better, you could easily mistake the S26 FE for an older model, and only real changes are the newer Exynos chipset and the glass enclosure around the rear camera lenses. </p><p>Everything else, from the cameras to the battery are essentially identical, which means Samsung is relying more on software upgrades to help sell the phone over its predecessors. Which is not a terrible plan, considering the number of flagship features Samsung has added to the Galaxy S26 FE. But it doesn't suggest that the phone is a must-have. Especially when you remember the Galaxy A57 exists.</p><h2 id="the-galaxy-a57-is-right-there">The Galaxy A57 is right there</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="WnVbdoxHAWjSTTJWxanJnR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE and A57 held in the hand." src="https://cdn.mos.cms.futurecdn.net/WnVbdoxHAWjSTTJWxanJnR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The minimal upgrades wouldn't be so bad on their own, but we can't forget the fact that the Galaxy A57 is still around — and costs a good $150 less than the cheapest Galaxy S26 FE. There are a bunch of ways the Galaxy A57 falters compared to the S26 FE, particularly when it comes to performance and the availability of AI features. That price cut has to come from somewhere, and Samsung can't save all that money by cutting premium materials.</p><p>Still, at the same time, the A57 shares a lot of the same hardware with the Galaxy S26 FE. The camera hardware is more or less identical, and puts up a good fight against the S26 FE's cameras, and both screens share the same size, resolution and brightness. The A57's battery is actually larger, weirdly enough, and they both support up to 45W wired charging speeds — though the A57 lacks wireless charging.</p><p>We can't do a full comparison just yet, and we'll need to get the S26 FE into the lab to figure out exactly what its deal is. Because there's only so much you can glean from a list of hardware specs. Still, things don't look great. Especially considering the $50 price hike, and the fact that the 256GB Galaxy S26 costs the same as the equivalent FE.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-outlook"><span>Samsung Galaxy S26 FE hands-on review: 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="GYNd6cPd7ZVnmCg7qSqYjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE in three colors." src="https://cdn.mos.cms.futurecdn.net/GYNd6cPd7ZVnmCg7qSqYjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The Galaxy S26 FE certainly shows promise, I'm struggling to understand why Samsung is releasing it in the first place. The Fan Edition series has been losing relevance for a while, especially now that Samsung is consistently releasing A-series phones in the U.S. and the Galaxy S26 FE doesn't really do much to help salvage the line-up's reputation in any way.</p><p>Based on my limited time with the phone, it seems that it is too similar to the Galaxy A57 to justify the higher price tag. At the same time, the price is too close to that of the Galaxy S26 to make many of these compromises worthwhile. It's that weird middle ground where it's not a cheap phone, but it's too cut back to be a true flagship.</p><p>So who is this phone for? It does offer more AI and Samsung-exclusive software features than cheaper options, and the fact that the 128GB storage option is still around means the cost of entry is noticeably lower. If you're an AI superfan that doesn't have a lot of money, this might be the Samsung phone for you, but otherwise you may as well pick up a different model.</p><p>Of course we'll have a much better idea of what the Galaxy S26 FE can do when we get the phone into the Tom's Guide lab for testing. That could change everything, or it could cement the idea that the S26 FE needs to die. We'll just have to wait and see.</p>
                                                            </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="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-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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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="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-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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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[ Samsung Galaxy S27 Ultra design leaked — and it could cause ‘the most intense wave of criticism in Galaxy history’ ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Over the weekend, a series of renders and drawings purported to reveal a redesigned Samsung Galaxy S27 Ultra with some surprising subtractions. The images came from two prominent Samsung leaks and appear to show a new horizontal bar design that's more reminiscent of the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro</a> or a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Google Pixel 11 Pro</a>. </p><p>The leaks started with a cryptic message from Samsung leaker Ice Universe, who posted a drawing and said, "I can't say anything."</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2091166586388562399"><p lang="en" dir="ltr">I can't say anything. pic.twitter.com/RmzMoPem12<a href="https://twitter.com/cantworkitout/status/2091166586388562399">August 22, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>They followed it up with a <a href="https://x.com/UniverseIce/status/2091391586081100096" target="_blank">full-body drawing</a> of the back of the phone. Those images appear to show a circle that is probably a Qi2 magnet for wireless charging. </p><p>From Ice Universe's sketches, it appears the Galaxy S27 Ultra loses a camera, going from the current triple stack to two, with the LED light and lenses in their own little pill. In another post, Universe noted that a new 5x telephoto lens will move into the LED pill and replace the current 3x version.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYdpAO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYdpAO.js" async></script><p>Yesterday, tipster <a href="https://x.com/SonnyDickson/status/2091487014181097967" target="_blank">Sonny Dickson posted</a> renders of the S27 Ultra, claiming that Samsung will offer the Ultra in two sizes. Rumors suggest Samsung is working on two sizes for the Ultra model, one of which will likely <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-pro-could-finally-be-the-smaller-ultra-phone-ive-been-waiting-for-heres-how">be the S27 Pro</a>. </p><p>It would make Samsung's offerings more similar to Apple's Pro and Pro Max models.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2091487014181097967"><p lang="en" dir="ltr">Here’s another look at the Samsung Galaxy S27 Ultra. Samsung is planning to offer the S27 Ultra in two different sizes. pic.twitter.com/3r84Vd82po<a href="https://twitter.com/cantworkitout/status/2091487014181097967">August 23, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Ice Universe seemed to confirm that the Pro model is coming today with <a href="https://x.com/UniverseIce/status/2091896398723813403/photo/1" target="_blank">new renders</a> and a post that claims the speaker on the bottom of the phone will be moved to the right side for the S27, S27 Plus and S27 Pro. The S27 Ultra will supposedly have its speaker on the left side.</p><p>Based on every drawing and render we've seen over the weekend, the new iPhone-esque plateau will only be available on the Ultra and Pro models. The base S27 and Plus models would have the stack.</p><p>With Samsung's foldables behind us, the rumor mill is starting to spin up in earnest for the company's flagship phone line. More renders will leak in the coming months, but we won't totally trust the leaks until we see some dummy units, which will probably leak in the fall.</p><p>As for the phones, Samsung will likely release the S27 lineup in the early part of next year. This year, the S26 series launched in February, and we expect Samsung will keep a similar schedule, give or take a week or two.</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/best-picks/best-samsung-phone">The best Samsung phone might not be the best for you — take our quiz to find out which you should buy</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/ive-been-training-with-the-galaxy-watch-9-for-a-month-3-things-i-like-and-3-i-dont">I've been training with the Galaxy Watch 9 for a month — 3 things I like (and 3 I don't)</a></li><li><a href="http://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></ul> ]]></dc:content>
                                                                                                                                            <link>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</link>
                                                                            <description>
                            <![CDATA[ An alleged render of the Samsung Galaxy S27 Ultra reveals a very iPhone-esque design and a missing camera. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">C7PmMG8uYShfNvyW2kSPAN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 24 Aug 2026 17:53:22 +0000</pubDate>                                                                                                                                <updated>Mon, 24 Aug 2026 23:13:21 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung 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-320-70.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/LacgYzjqWKVkFAs6DKZ3ak-1280-80.jpg">
                                                            <media:credit><![CDATA[@TechHome100]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy S27 Ultra render]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy S27 Ultra render]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy S27 Ultra render]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Over the weekend, a series of renders and drawings purported to reveal a redesigned Samsung Galaxy S27 Ultra with some surprising subtractions. The images came from two prominent Samsung leaks and appear to show a new horizontal bar design that's more reminiscent of the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro</a> or a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Google Pixel 11 Pro</a>. </p><p>The leaks started with a cryptic message from Samsung leaker Ice Universe, who posted a drawing and said, "I can't say anything."</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2091166586388562399"><p lang="en" dir="ltr">I can't say anything. pic.twitter.com/RmzMoPem12<a href="https://twitter.com/cantworkitout/status/2091166586388562399">August 22, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>They followed it up with a <a href="https://x.com/UniverseIce/status/2091391586081100096" target="_blank">full-body drawing</a> of the back of the phone. Those images appear to show a circle that is probably a Qi2 magnet for wireless charging. </p><p>From Ice Universe's sketches, it appears the Galaxy S27 Ultra loses a camera, going from the current triple stack to two, with the LED light and lenses in their own little pill. In another post, Universe noted that a new 5x telephoto lens will move into the LED pill and replace the current 3x version.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYdpAO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYdpAO.js" async></script><p>Yesterday, tipster <a href="https://x.com/SonnyDickson/status/2091487014181097967" target="_blank">Sonny Dickson posted</a> renders of the S27 Ultra, claiming that Samsung will offer the Ultra in two sizes. Rumors suggest Samsung is working on two sizes for the Ultra model, one of which will likely <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-pro-could-finally-be-the-smaller-ultra-phone-ive-been-waiting-for-heres-how">be the S27 Pro</a>. </p><p>It would make Samsung's offerings more similar to Apple's Pro and Pro Max models.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2091487014181097967"><p lang="en" dir="ltr">Here’s another look at the Samsung Galaxy S27 Ultra. Samsung is planning to offer the S27 Ultra in two different sizes. pic.twitter.com/3r84Vd82po<a href="https://twitter.com/cantworkitout/status/2091487014181097967">August 23, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Ice Universe seemed to confirm that the Pro model is coming today with <a href="https://x.com/UniverseIce/status/2091896398723813403/photo/1" target="_blank">new renders</a> and a post that claims the speaker on the bottom of the phone will be moved to the right side for the S27, S27 Plus and S27 Pro. The S27 Ultra will supposedly have its speaker on the left side.</p><p>Based on every drawing and render we've seen over the weekend, the new iPhone-esque plateau will only be available on the Ultra and Pro models. The base S27 and Plus models would have the stack.</p><p>With Samsung's foldables behind us, the rumor mill is starting to spin up in earnest for the company's flagship phone line. More renders will leak in the coming months, but we won't totally trust the leaks until we see some dummy units, which will probably leak in the fall.</p><p>As for the phones, Samsung will likely release the S27 lineup in the early part of next year. This year, the S26 series launched in February, and we expect Samsung will keep a similar schedule, give or take a week or two.</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/best-picks/best-samsung-phone">The best Samsung phone might not be the best for you — take our quiz to find out which you should buy</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/ive-been-training-with-the-galaxy-watch-9-for-a-month-3-things-i-like-and-3-i-dont">I've been training with the Galaxy Watch 9 for a month — 3 things I like (and 3 I don't)</a></li><li><a href="http://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></ul>
                                                            </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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p><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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p><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-1920-80.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[ I put Honor's Robot Phone against a pocket gimbal camera — here's which one I'd buy ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Honor Robot Phone is no longer just a concept. We went <a href="https://www.tomsguide.com/phones/i-tried-the-honor-robot-phone-and-its-the-coolest-phone-in-years-thats-not-coming-to-the-us">hands-on with the final version of the Honor Robot Phone</a>, and it's officially going on sale in China starting August 20 for RMB 9,999 (around $1,480), putting it roughly in the same price bracket as the iPhone 17 Pro Max in the country. </p><p>While I compared the <a href="https://www.tomsguide.com/phones/iphones/honor-robot-phone-vs-iphone-17-pro-max">Honor Robot Phone with the iPhone 17 Pro Max</a>, one question has been on my mind ever since I first used the device: Is it actually better than a dedicated pocket gimbal camera? </p><p>I tested the Honor Robot Phone alongside the <a href="https://www.tomsguide.com/cameras-photography/i-tested-the-insta360-luna-ultra-for-a-month-and-its-become-my-go-to-camera-as-a-content-creator">Insta360 Luna Ultra</a> to find out, and the answer surprised me. The dedicated gimbal is still better overall, but Honor has gotten so close that you might not need to carry one anymore.</p><h2 id="honor-got-surprisingly-close-to-a-dedicated-gimbal-on-its-first-try">Honor got surprisingly close to a dedicated gimbal on its first try</h2><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="MqqZqkuWMGWZfPzEQBu2fe" name="honor-robot-phone-vs-luna-ultra-2" alt="Honor robot phone next to Insta360 Luna Ultra" src="https://cdn.mos.cms.futurecdn.net/MqqZqkuWMGWZfPzEQBu2fe-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>The most impressive thing about the Robot Phone is just how similar the shooting experience feels to using an actual pocket gimbal camera. Honor has mounted a 200MP f/1.6 camera on a physical arm that can move around to stabilize footage and follow subjects. </p><p>Of course, the form factors are completely different. The <a href="https://www.tomsguide.com/cameras-photography/i-tested-the-insta360-luna-ultra-for-a-month-and-its-become-my-go-to-camera-as-a-content-creator">Luna Ultra</a> is designed specifically to be held as a camera, so it's naturally more comfortable when you're recording for longer durations.</p><p>But the core idea is pretty much the same on both. Even on the Robot Phone, you're getting pretty much the same moving gimbal setup as the Luna Ultra, except it's built into a standard slab smartphone that doesn't feel ridiculously thick. </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/raWY1rAX_04" allowfullscreen></iframe></div></div><p>There are a few small differences, though. In my testing, I found the Luna Ultra slightly faster to get up and running. You can pull it out and start recording almost immediately, whereas getting into the Robot Phone's gimbal camera takes an extra second or two. </p><p>Interestingly, both devices also share the same limitation when it comes to vertical video. Neither physically rotates its main sensor when you switch to portrait recording. Instead, both crop into the horizontally oriented sensor, meaning vertical footage tops out at roughly 2.8K rather than native 4K.</p><h2 id="even-the-software-experience-is-remarkably-similar">Even the software experience is remarkably similar</h2><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="nUVW72QJEUt5euQBWxTjn" name="honor-robot-phone-vs-iphone-17-pro-max-4" alt="Honor Robot Phone hands-on versus iPhone 17 Pro Max" src="https://cdn.mos.cms.futurecdn.net/nUVW72QJEUt5euQBWxTjn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>Speaking of similarities, the software experience on both devices is surprisingly close as well. Both offer subject tracking, letting you lock onto a person and have the gimbal automatically follow them to keep them in the frame. </p><p>In my testing, I expected the Luna Ultra to have an advantage here, but it really doesn't. I tried tracking a person in a busy Shenzhen bay area while walking alongside them, and the Honor Robot Phone easily matched the Luna Ultra at keeping the subject in frame. </p><p>The difference only really becomes noticeable when the subject moves quickly toward the edge. During normal movement, though, the Robot Phone had no trouble staying locked on, even with other people moving around the scene.</p><p>The Robot Phone also offers a Super Steady mode that adds another layer of stabilization on top of the physical gimbal, something the Luna Ultra doesn't offer. That said, I don't think you're missing much without it. Footage from both devices already comes out incredibly stable. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KD7QWHmwqrZdjBcgMmzgQe" name="Insta360 Luna Ultra" alt="Insta360 Luna Ultra" src="https://cdn.mos.cms.futurecdn.net/KD7QWHmwqrZdjBcgMmzgQe-1920-80.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>One software advantage the Robot Phone does have is Honor's partnership with ARRI. If you're into filmmaking or more serious content creation, you can use ARRI's cinematic color science while shooting video, which isn't something you get on the Luna Ultra.</p><p>On the other hand, newer pocket gimbals like the Luna Ultra and <a href="https://www.tomsguide.com/cameras-photography/dji-osmo-pocket-4p-first-impressions">DJI Osmo Pocket 4P</a> have dedicated zoom hardware. Honor doesn't have that on its gimbal-mounted camera, but the 200MP sensor gives it plenty of room to crop in, offering up to around 4x zoom. So you're not completely missing out there either.</p><h2 id="i-39-d-still-buy-the-dedicated-gimbal-but-honor-got-incredibly-close">I'd still buy the dedicated gimbal, but Honor got incredibly close</h2><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="2i7FFTykk8vX5peuycjdde" name="Insta360 Luna Ultra" alt="Insta360 Luna Ultra" src="https://cdn.mos.cms.futurecdn.net/2i7FFTykk8vX5peuycjdde-1920-80.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>On the whole, if I had to spend my money, I'd still probably go with the Luna Ultra. There are a few small things it simply does better. It's quicker to launch, more comfortable to hold for longer shoots, has dedicated zoom hardware, and I found the subject tracking to be ever so slightly better. </p><p>Plus, you can actually buy it in the U.S., whereas the Robot Phone remains limited to China for now. </p><p>But then again, the Robot Phone isn't just a camera. For the same money, you're getting the gimbal hardware inside a full-fledged flagship phone with a 7,060mAh battery, <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>, 512GB of storage, and a flagship display. </p><p>And I think that's where Honor has really surprised me. I went into this comparison expecting the Luna Ultra to easily come out on top because, well, that's literally what it's built for. It still does, just not by the margin I expected.</p><div data-widget-type="productname" data-model-name="Insta360 Luna Ultra"></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/ive-been-living-with-the-galaxy-z-fold-8-for-3-weeks-and-i-was-wrong">I’ve been living with the Galaxy Z Fold 8 for 3 weeks — and I was wrong</a></li><li><a href="https://www.tomsguide.com/cameras-photography/insta360s-gimbal-camera-has-just-hit-shelves-and-theres-one-factor-that-has-me-lining-up-to-purchase-one-stat">Insta360's gimbal camera has just hit shelves, and there's one factor that has me lining up to purchase one stat</a></li><li><a href="https://www.tomsguide.com/cameras-photography/my-favorite-cameras-drones-of-2026-so-far">I’ve tested a ton of cameras and drones in 2026 — and these are my 5 favorites (so far) from DJI, Canon, Leica and more</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/android-phones/i-put-honor-robot-phone-against-pocket-gimbal-camera</link>
                                                                            <description>
                            <![CDATA[ Can the Honor Robot Phone replace a pocket gimbal camera like the DJI Osmo Pocket or Insta360 Luna Ultra? I put it to the test. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DGxuMqSPyAn482C8ziJJPA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/p7verGzkUfXuSH3XJ9GrYe-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 22 Aug 2026 06:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Android Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Sanuj Bhatia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/8p5BvMVA7cnu5AWkxnTjRC-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/p7verGzkUfXuSH3XJ9GrYe-1280-80.jpg">
                                                            <media:credit><![CDATA[Sanuj Bhatia / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Honor robot phone next to Insta360 Luna Ultra]]></media:description>                                                            <media:text><![CDATA[Honor robot phone next to Insta360 Luna Ultra]]></media:text>
                                <media:title type="plain"><![CDATA[Honor robot phone next to Insta360 Luna Ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/p7verGzkUfXuSH3XJ9GrYe-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Honor Robot Phone is no longer just a concept. We went <a href="https://www.tomsguide.com/phones/i-tried-the-honor-robot-phone-and-its-the-coolest-phone-in-years-thats-not-coming-to-the-us">hands-on with the final version of the Honor Robot Phone</a>, and it's officially going on sale in China starting August 20 for RMB 9,999 (around $1,480), putting it roughly in the same price bracket as the iPhone 17 Pro Max in the country. </p><p>While I compared the <a href="https://www.tomsguide.com/phones/iphones/honor-robot-phone-vs-iphone-17-pro-max">Honor Robot Phone with the iPhone 17 Pro Max</a>, one question has been on my mind ever since I first used the device: Is it actually better than a dedicated pocket gimbal camera? </p><p>I tested the Honor Robot Phone alongside the <a href="https://www.tomsguide.com/cameras-photography/i-tested-the-insta360-luna-ultra-for-a-month-and-its-become-my-go-to-camera-as-a-content-creator">Insta360 Luna Ultra</a> to find out, and the answer surprised me. The dedicated gimbal is still better overall, but Honor has gotten so close that you might not need to carry one anymore.</p><h2 id="honor-got-surprisingly-close-to-a-dedicated-gimbal-on-its-first-try">Honor got surprisingly close to a dedicated gimbal on its first try</h2><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="MqqZqkuWMGWZfPzEQBu2fe" name="honor-robot-phone-vs-luna-ultra-2" alt="Honor robot phone next to Insta360 Luna Ultra" src="https://cdn.mos.cms.futurecdn.net/MqqZqkuWMGWZfPzEQBu2fe-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>The most impressive thing about the Robot Phone is just how similar the shooting experience feels to using an actual pocket gimbal camera. Honor has mounted a 200MP f/1.6 camera on a physical arm that can move around to stabilize footage and follow subjects. </p><p>Of course, the form factors are completely different. The <a href="https://www.tomsguide.com/cameras-photography/i-tested-the-insta360-luna-ultra-for-a-month-and-its-become-my-go-to-camera-as-a-content-creator">Luna Ultra</a> is designed specifically to be held as a camera, so it's naturally more comfortable when you're recording for longer durations.</p><p>But the core idea is pretty much the same on both. Even on the Robot Phone, you're getting pretty much the same moving gimbal setup as the Luna Ultra, except it's built into a standard slab smartphone that doesn't feel ridiculously thick. </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/raWY1rAX_04" allowfullscreen></iframe></div></div><p>There are a few small differences, though. In my testing, I found the Luna Ultra slightly faster to get up and running. You can pull it out and start recording almost immediately, whereas getting into the Robot Phone's gimbal camera takes an extra second or two. </p><p>Interestingly, both devices also share the same limitation when it comes to vertical video. Neither physically rotates its main sensor when you switch to portrait recording. Instead, both crop into the horizontally oriented sensor, meaning vertical footage tops out at roughly 2.8K rather than native 4K.</p><h2 id="even-the-software-experience-is-remarkably-similar">Even the software experience is remarkably similar</h2><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="nUVW72QJEUt5euQBWxTjn" name="honor-robot-phone-vs-iphone-17-pro-max-4" alt="Honor Robot Phone hands-on versus iPhone 17 Pro Max" src="https://cdn.mos.cms.futurecdn.net/nUVW72QJEUt5euQBWxTjn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>Speaking of similarities, the software experience on both devices is surprisingly close as well. Both offer subject tracking, letting you lock onto a person and have the gimbal automatically follow them to keep them in the frame. </p><p>In my testing, I expected the Luna Ultra to have an advantage here, but it really doesn't. I tried tracking a person in a busy Shenzhen bay area while walking alongside them, and the Honor Robot Phone easily matched the Luna Ultra at keeping the subject in frame. </p><p>The difference only really becomes noticeable when the subject moves quickly toward the edge. During normal movement, though, the Robot Phone had no trouble staying locked on, even with other people moving around the scene.</p><p>The Robot Phone also offers a Super Steady mode that adds another layer of stabilization on top of the physical gimbal, something the Luna Ultra doesn't offer. That said, I don't think you're missing much without it. Footage from both devices already comes out incredibly stable. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KD7QWHmwqrZdjBcgMmzgQe" name="Insta360 Luna Ultra" alt="Insta360 Luna Ultra" src="https://cdn.mos.cms.futurecdn.net/KD7QWHmwqrZdjBcgMmzgQe-1920-80.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>One software advantage the Robot Phone does have is Honor's partnership with ARRI. If you're into filmmaking or more serious content creation, you can use ARRI's cinematic color science while shooting video, which isn't something you get on the Luna Ultra.</p><p>On the other hand, newer pocket gimbals like the Luna Ultra and <a href="https://www.tomsguide.com/cameras-photography/dji-osmo-pocket-4p-first-impressions">DJI Osmo Pocket 4P</a> have dedicated zoom hardware. Honor doesn't have that on its gimbal-mounted camera, but the 200MP sensor gives it plenty of room to crop in, offering up to around 4x zoom. So you're not completely missing out there either.</p><h2 id="i-39-d-still-buy-the-dedicated-gimbal-but-honor-got-incredibly-close">I'd still buy the dedicated gimbal, but Honor got incredibly close</h2><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="2i7FFTykk8vX5peuycjdde" name="Insta360 Luna Ultra" alt="Insta360 Luna Ultra" src="https://cdn.mos.cms.futurecdn.net/2i7FFTykk8vX5peuycjdde-1920-80.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>On the whole, if I had to spend my money, I'd still probably go with the Luna Ultra. There are a few small things it simply does better. It's quicker to launch, more comfortable to hold for longer shoots, has dedicated zoom hardware, and I found the subject tracking to be ever so slightly better. </p><p>Plus, you can actually buy it in the U.S., whereas the Robot Phone remains limited to China for now. </p><p>But then again, the Robot Phone isn't just a camera. For the same money, you're getting the gimbal hardware inside a full-fledged flagship phone with a 7,060mAh battery, <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>, 512GB of storage, and a flagship display. </p><p>And I think that's where Honor has really surprised me. I went into this comparison expecting the Luna Ultra to easily come out on top because, well, that's literally what it's built for. It still does, just not by the margin I expected.</p><div data-widget-type="productname" data-model-name="Insta360 Luna Ultra"></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/ive-been-living-with-the-galaxy-z-fold-8-for-3-weeks-and-i-was-wrong">I’ve been living with the Galaxy Z Fold 8 for 3 weeks — and I was wrong</a></li><li><a href="https://www.tomsguide.com/cameras-photography/insta360s-gimbal-camera-has-just-hit-shelves-and-theres-one-factor-that-has-me-lining-up-to-purchase-one-stat">Insta360's gimbal camera has just hit shelves, and there's one factor that has me lining up to purchase one stat</a></li><li><a href="https://www.tomsguide.com/cameras-photography/my-favorite-cameras-drones-of-2026-so-far">I’ve tested a ton of cameras and drones in 2026 — and these are my 5 favorites (so far) from DJI, Canon, Leica and more</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-1920-80.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-320-70.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-320-70.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Will Salmon is Tom&#039;s Guide&#039;s Collections Editor, curating advice on the best products to spend your money on. Will has been writing about tech and entertainment for almost 20 years, including stints as GamesRadar+&#039;s Streaming Editor, editing comics website Newsarama, and writing for lots and lots of magazines.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-320-70.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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've spent more than three weeks using the Galaxy Z Flip 8 — and it's a tipping point for Samsung ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When it comes to the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a>, I strongly prefer flip-style ones for their compact footprint and effortless one-handed use. On top of that, they’re undeniably far more versatile for vlogging than notebook-style foldables, letting me frame shots on the outer cover screen using the superior rear cameras.</p><p>For years, I’ve praised Samsung’s flip-style foldables — but this year’s <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8</a> has me concerned. It’s not just that it represents the most painfully lazy upgrade in the series’ history, but also that Samsung’s focus seems to have largely shifted elsewhere.</p><p>Pairing that with the glowing reception for 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> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, and it’s clear Samsung is at a tipping point with its Z Flip line. Here’s why.</p><h2 id="motorola-has-a-way-more-robust-selection">Motorola has a way more robust selection</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4206px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GjM8ydranBDXssmEh3cvRj" name="Motorola Razr 2026 lineup tested" alt="Motorola Razr 2026 lineup." src="https://cdn.mos.cms.futurecdn.net/GjM8ydranBDXssmEh3cvRj-1920-80.jpg" mos="" align="middle" fullscreen="" width="4206" height="2366" 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>Despite being an early pioneer in the space, Motorola lagged behind Samsung for years with its Razr phones, plagued by awkward hinge designs and lackluster performance. But the narrative has shifted dramatically over the last couple of generations.</p><p>Instead of treating clamshell foldables as a one-size-fits-all product, Motorola built out a lineup with broader appeal. That strategy has culminated in today's lineup of three clamshell foldables alongside a book-style model. By offering varied price points, Motorola gives consumers the freedom to choose what fits their budget and needs. In contrast, Samsung has stuck to releasing just a single flip phone each generation.</p><h2 id="cameras-are-not-an-afterthought">Cameras are not an afterthought</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/UL8HcuGXKj4q6JFezkyoUK-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GTZRj6Pi6VoQvknNv7ADYM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jTfJDamBtu5bVLWN9TRoTM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/9DnE3sjaZEFBMSTVNRuNZM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xM7Loc7doDCM5mAG5sV5eM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sXRnQXvyTmJmUAJLFSiycM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/U7ppHAi6rmZbkgichjv3fM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ra7Tg3hxXTr9CUfn4TY9gM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/heCfmP4RcTc3n6J22o7GgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jZPuqwFNhDX5WWQNh9QBhM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5onDrXP74YsoPKX5vazGgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QuqAkomxsfvBfgLxc99hgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/3sH7sebhf5GF7Au2mm35yM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/e6Ga8L5yoJTj5v5xLX7y2N-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/voxAjzxdgWsXvkHXR2baoM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gD4hisXb9eYHtNFirB9ZrM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Just as crucially, the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-ultra-2026-review">Razr Ultra (2026)</a> finally dismantles the long-standing stereotype that Motorola’s flip cameras are an afterthought. With upgraded high-resolution sensors, refined image processing, and superior low-light performance, it no longer forces users to compromise camera quality for pocketability. Just look at some of the snapshots I captured above to see how far Motorola's has come.</p><h2 id="no-mention-of-a-galaxy-z-flip-fe-this-time">No mention of a Galaxy Z Flip FE this 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Qgy6nXqaJrnUHJ7HwpbdXY" name="Samsung Galaxy Z Flip 7 FE-01-LIST" alt="Samsung Galaxy Z Fold 7 FE tent mode" src="https://cdn.mos.cms.futurecdn.net/Qgy6nXqaJrnUHJ7HwpbdXY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Perhaps the most glaring absence at Unpacked was any sign of a Galaxy Z Flip FE follow-up. When the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-fe-review">Galaxy Z Flip 7 FE</a> launched alongside the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-hands-on-review-feels-like-flip-phone-perfection">Z Flip 7 </a>last year, my colleagues and I were highly critical of the move — one we felt wasn't necessary since it was essentially a rebadged <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-6-review">Z Flip 6</a>. It certainly didn't help that it still carried a hefty $899 price tag.</p><p>Making matters worse, Samsung didn't just stick to minor hardware upgrades for the Flip 8 — it also tacked on a $100 price bump. In my <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8 review</a>, I noted that "Samsung's baby-step approach feels tough to defend."</p><p>While the switch back to a flagship Qualcomm chip delivers notable performance gains, I was shocked by the negligible battery life improvements. Instead of adopting the ultra-thin profile of the Z Fold 8 or delivering substantial hardware innovations, the Z Flip 8 feels more like yet another rehash.</p><h2 id="i-want-a-galaxy-s27-ultra-flip">I want a Galaxy S27 Ultra Flip</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4397px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MMrH9wwYJUAMMEM4PEkYTJ" name="Galaxy-S26-Ultra-review-18" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/MMrH9wwYJUAMMEM4PEkYTJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="4397" height="2473" 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 the Z Flip line is going to survive, Samsung needs to stop playing it safe and introduce a true Ultra model. We’ve seen the company pour top-tier resources into the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26 Ultra</a> and the Z Fold 8 Ultra — and the flip form factor deserves that exact same flagship treatment.</p><p>The most logical candidate would be something along the lines of a Galaxy S27 Ultra Flip. To truly make a statement, it would require an ultra-thin chassis, uncompromising battery life, and, crucially, a versatile triple-camera system that finally brings a dedicated telephoto lens to a Samsung clamshell.</p><p>Packing that level of hardware into a flip phone would inevitably command a steeper price tag. But considering what buyers are already willing to shell out for premium competitors like the Razr Ultra (2026), power users and creators would happily pay for a clamshell that refuses to cut corners.</p><p>Samsung has reached a critical tipping point with the Z Flip series. Iterative spec bumps and unjustified price hikes won't cut it anymore — the lineup desperately needs a major overhaul to breathe real excitement back into the category.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WwqxAX"></div>                            </div>                            <script src="https://kwizly.com/embed/WwqxAX.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/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/samsung-phones/ive-spent-more-than-three-weeks-using-the-galaxy-z-flip-8-and-its-a-tipping-point-for-samsung</link>
                                                                            <description>
                            <![CDATA[ Samsung has long dominated the flip-phone form factor, but the release of the Galaxy Z Flip 8 has put the series in serious doubt. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Fssbj2YJX3crGjn4h3JqyF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sFX3dd6Le7GcZSuThSyjS6-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 16 Aug 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung 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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/sFX3dd6Le7GcZSuThSyjS6-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Flip 8 review.]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Flip 8 review.]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Flip 8 review.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sFX3dd6Le7GcZSuThSyjS6-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When it comes to the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a>, I strongly prefer flip-style ones for their compact footprint and effortless one-handed use. On top of that, they’re undeniably far more versatile for vlogging than notebook-style foldables, letting me frame shots on the outer cover screen using the superior rear cameras.</p><p>For years, I’ve praised Samsung’s flip-style foldables — but this year’s <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8</a> has me concerned. It’s not just that it represents the most painfully lazy upgrade in the series’ history, but also that Samsung’s focus seems to have largely shifted elsewhere.</p><p>Pairing that with the glowing reception for 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> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, and it’s clear Samsung is at a tipping point with its Z Flip line. Here’s why.</p><h2 id="motorola-has-a-way-more-robust-selection">Motorola has a way more robust selection</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4206px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GjM8ydranBDXssmEh3cvRj" name="Motorola Razr 2026 lineup tested" alt="Motorola Razr 2026 lineup." src="https://cdn.mos.cms.futurecdn.net/GjM8ydranBDXssmEh3cvRj-1920-80.jpg" mos="" align="middle" fullscreen="" width="4206" height="2366" 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>Despite being an early pioneer in the space, Motorola lagged behind Samsung for years with its Razr phones, plagued by awkward hinge designs and lackluster performance. But the narrative has shifted dramatically over the last couple of generations.</p><p>Instead of treating clamshell foldables as a one-size-fits-all product, Motorola built out a lineup with broader appeal. That strategy has culminated in today's lineup of three clamshell foldables alongside a book-style model. By offering varied price points, Motorola gives consumers the freedom to choose what fits their budget and needs. In contrast, Samsung has stuck to releasing just a single flip phone each generation.</p><h2 id="cameras-are-not-an-afterthought">Cameras are not an afterthought</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/UL8HcuGXKj4q6JFezkyoUK-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GTZRj6Pi6VoQvknNv7ADYM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jTfJDamBtu5bVLWN9TRoTM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/9DnE3sjaZEFBMSTVNRuNZM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xM7Loc7doDCM5mAG5sV5eM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sXRnQXvyTmJmUAJLFSiycM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/U7ppHAi6rmZbkgichjv3fM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ra7Tg3hxXTr9CUfn4TY9gM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/heCfmP4RcTc3n6J22o7GgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jZPuqwFNhDX5WWQNh9QBhM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5onDrXP74YsoPKX5vazGgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QuqAkomxsfvBfgLxc99hgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/3sH7sebhf5GF7Au2mm35yM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/e6Ga8L5yoJTj5v5xLX7y2N-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/voxAjzxdgWsXvkHXR2baoM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gD4hisXb9eYHtNFirB9ZrM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Just as crucially, the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-ultra-2026-review">Razr Ultra (2026)</a> finally dismantles the long-standing stereotype that Motorola’s flip cameras are an afterthought. With upgraded high-resolution sensors, refined image processing, and superior low-light performance, it no longer forces users to compromise camera quality for pocketability. Just look at some of the snapshots I captured above to see how far Motorola's has come.</p><h2 id="no-mention-of-a-galaxy-z-flip-fe-this-time">No mention of a Galaxy Z Flip FE this 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Qgy6nXqaJrnUHJ7HwpbdXY" name="Samsung Galaxy Z Flip 7 FE-01-LIST" alt="Samsung Galaxy Z Fold 7 FE tent mode" src="https://cdn.mos.cms.futurecdn.net/Qgy6nXqaJrnUHJ7HwpbdXY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Perhaps the most glaring absence at Unpacked was any sign of a Galaxy Z Flip FE follow-up. When the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-fe-review">Galaxy Z Flip 7 FE</a> launched alongside the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-hands-on-review-feels-like-flip-phone-perfection">Z Flip 7 </a>last year, my colleagues and I were highly critical of the move — one we felt wasn't necessary since it was essentially a rebadged <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-6-review">Z Flip 6</a>. It certainly didn't help that it still carried a hefty $899 price tag.</p><p>Making matters worse, Samsung didn't just stick to minor hardware upgrades for the Flip 8 — it also tacked on a $100 price bump. In my <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8 review</a>, I noted that "Samsung's baby-step approach feels tough to defend."</p><p>While the switch back to a flagship Qualcomm chip delivers notable performance gains, I was shocked by the negligible battery life improvements. Instead of adopting the ultra-thin profile of the Z Fold 8 or delivering substantial hardware innovations, the Z Flip 8 feels more like yet another rehash.</p><h2 id="i-want-a-galaxy-s27-ultra-flip">I want a Galaxy S27 Ultra Flip</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4397px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MMrH9wwYJUAMMEM4PEkYTJ" name="Galaxy-S26-Ultra-review-18" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/MMrH9wwYJUAMMEM4PEkYTJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="4397" height="2473" 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 the Z Flip line is going to survive, Samsung needs to stop playing it safe and introduce a true Ultra model. We’ve seen the company pour top-tier resources into the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26 Ultra</a> and the Z Fold 8 Ultra — and the flip form factor deserves that exact same flagship treatment.</p><p>The most logical candidate would be something along the lines of a Galaxy S27 Ultra Flip. To truly make a statement, it would require an ultra-thin chassis, uncompromising battery life, and, crucially, a versatile triple-camera system that finally brings a dedicated telephoto lens to a Samsung clamshell.</p><p>Packing that level of hardware into a flip phone would inevitably command a steeper price tag. But considering what buyers are already willing to shell out for premium competitors like the Razr Ultra (2026), power users and creators would happily pay for a clamshell that refuses to cut corners.</p><p>Samsung has reached a critical tipping point with the Z Flip series. Iterative spec bumps and unjustified price hikes won't cut it anymore — the lineup desperately needs a major overhaul to breathe real excitement back into the category.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WwqxAX"></div>                            </div>                            <script src="https://kwizly.com/embed/WwqxAX.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/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[ 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Will Salmon is Tom&#039;s Guide&#039;s Collections Editor, curating advice on the best products to spend your money on. Will has been writing about tech and entertainment for almost 20 years, including stints as GamesRadar+&#039;s Streaming Editor, editing comics website Newsarama, and writing for lots and lots of magazines.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Will Salmon is Tom&#039;s Guide&#039;s Collections Editor, curating advice on the best products to spend your money on. Will has been writing about tech and entertainment for almost 20 years, including stints as GamesRadar+&#039;s Streaming Editor, editing comics website Newsarama, and writing for lots and lots of magazines.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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 living with the Galaxy Z Fold 8 for 3 weeks — and I was wrong ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If there’s one thing I’ve learned in testing phones for over 20 years, it’s that there’s a difference between reviewing a device and living with it. And now that I’ve spent three weeks 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</a>, I can say that my opinion has changed and that I was right about some things — and wrong about some others.</p><h2 id="the-cameras-are-good-enough">The cameras are good 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="c7J7KZ5TxP3SDSB6ALAg2k" name="Samsung Galaxy Z Fold 8--6" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/c7J7KZ5TxP3SDSB6ALAg2k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>First, let’s talk about the cameras. I stand by what I initially wrote about it being a bummer that the Fold 8 doesn’t have a telephoto zoom. For $1,900 you deserve one. But I have since tested the <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"><u>Fold 8 vs the 3x optical zoom on the Fold 8 Ultra</u></a> in a series of tests and I didn’t notice a huge difference until I got to 10x.</p><p>My point here is that you can more than get by with the Fold 8’s dual rear shooters. And I especially appreciate the improved low-light performance versus the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"><u>Fold 7</u></a>. The Nightography is just better.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/jnafuqsfupeaSFjL8qo5zj-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zs9fisEBmvsJDfWkYetdAk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/78txuj8kx9KcDFHxJ3fB7k-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/P6qeQHWiWXPmgMCv4LtZDk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Su2cj7sQBhiLcjkNw2zjCk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>If you really care about zoom performance, you’re better off getting the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review"><u>Samsung Galaxy S26 Ultra</u></a> and its 5x optical zoom, or going with a different foldable altogether 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"><u>Google Pixel 11 Pro Fold</u></a>, which also packs a 5x telephoto. </p><div class="product"><a data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="vZVLkgJrMPPWhKGBnWrT63" name="9Rhpe6TtrVFSNo9Vtn27Tm" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vZVLkgJrMPPWhKGBnWrT63-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,000 off w/ trade-in @ Samsung</strong></a><br>Samsung is knocking up to $1,000 off Galaxy Z Fold 8 preorders when you trade-in an older phone. The phone features an 7.6-inch OLED main display, 5.5-inch cover screen, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8 review</a>, we called it our favorite foldable to date. It loses the telephoto zoom, but you get a greatly reduced crease, brighter main screen and lighter design.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><h2 id="no-flex-view-is-not-a-dealbreaker">No Flex View is not a dealbreaker</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3806px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yy29a3yqPwGSdSqoT7oPPX" name="Galaxy Z Fold 8-9" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/yy29a3yqPwGSdSqoT7oPPX-1920-80.jpg" mos="" align="middle" fullscreen="" width="3806" height="2141" 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 ability to use your foldable phone as a mini laptop certainly comes in handy, but the Fold 8 ditches this feature because of the way the hinge is designed. So, for example, you can’t play videos with the content up top and controls down below. Or take a Google Meet call without having to hold the phone.</p><p>It’s a bummer, but at least there’s a hands-free alternative for watching videos. You can just use the outer display on the Fold 8 and put it in tent mode. It’s a nifty way for me to catch up on that day’s First Take episode while I’m on lunch break at work or doing the dishes.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exVp2O"></div>                            </div>                            <script src="https://kwizly.com/embed/exVp2O.js" async></script><h2 id="tiktok-is-dangerously-addictive-youtube-shorts-needs-a-fix">TikTok Is dangerously addictive. YouTube Shorts needs a fix</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="nrCY8poLdeA4rgB6PXAX9k" name="Samsung Galaxy Z Fold 8--10" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/nrCY8poLdeA4rgB6PXAX9k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I admit that I scroll on TikTok way too much, but my addiction has gotten worse on the Fold 8. That’s because the front display is perfect for snacking content while I’m waiting for my bus ride home.</p><p>Open up to the main 7.6-inch display, and TikTok is even better if you love to read comments. They pop in from the right side in a dual-pane format. Even better, as you scroll through TikTok’s with the comments upon, they’ll automatically refresh for each video.</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="YH4cXbfN7jtTxuwSe7HsCk" name="Samsung Galaxy Z Fold 8--9" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/YH4cXbfN7jtTxuwSe7HsCk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Too bad YouTube Shorts isn’t similarly optimized. You have to X out of the comments before you scroll to the next video, which is dumb. This also speaks to my issue with apps in general on the Galaxy Fold — too many aren’t optimized for the wider display. It’s something Samsung is going to have to fix, because you know Apple will be working with developers to make sure apps look amazing on the iPhone Fold/Ultra.</p><h2 id="the-shape-is-just-right-but-not-in-my-pocket">The shape is just right (but not in my pocket)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MSbku8TL3Wz9tTKEpq2AwU" name="Galaxy Z Fold 8 pants" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/MSbku8TL3Wz9tTKEpq2AwU-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Initially I thought the Galaxy Z Fold 8 might be awkwardly wide when closed, especially when trying to use the phone quickly with one hand to scroll through notifications. But overall I haven’t had any issues, and I find myself responding to Slack messages on the cover display all the time.</p><p>When I’m on the go, however, I’ve found that the wide design of the Fold 8 is actually not as comfy in my front pocket as the Fold 8 Ultra. The former’s wider body is a bit more awkward when I’m walking. So I often put the Fold 8 in my back pocket instead.</p><h2 id="it-s-my-new-favorite-e-reader">It’s my new favorite e-reader</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="MaDJdLutEFff7YMHqdY89k" name="Samsung Galaxy Z Fold 8--11" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/MaDJdLutEFff7YMHqdY89k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I’ve been trying to get back into reading more, starting with Joanna Stern’s <a href="https://www.amazon.com/Am-Not-Robot-Almost-Everything/dp/0063446618"><u>“I Am Not a Robot,”</u></a> which is about her journey of using nothing but AI tools for a year. And the Fold 8 is the perfect e-reader stand-in for two reasons. </p><p>One, when you flip around the main display you get a 3:4 aspect ratio that’s very Kindle-like. And, two, the anti-reflective coating makes reading outside a lot easier than I thought. There’s a lot less glare than previous 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PopQKSSXA7u8J8bvFcYMBk" name="Samsung Galaxy Z Fold 8--7" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/PopQKSSXA7u8J8bvFcYMBk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Plus, as I get ready for “Avengers: Doomsday,” I asked Gemini which Marvel comics I should be ready to get up to speed on Dr. Doom’s origin and powers. So I subscribed to Marvel Ultimate and I find the Fold 8 is a pretty sweet format for diving in.</p><h2 id="how-good-is-the-battery-life">How good is the 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hQ292cJhTMbbBXemmfWj7k" name="Samsung Galaxy Z Fold 8--8" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/hQ292cJhTMbbBXemmfWj7k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Now that I’ve been using the Fold 8 as a daily driver, I’ve discovered that it has pretty good staying power. On most days starting at 7 am with moderate usage — which includes streaming Spotify on the go, checking Slack and email, and watching videos to and from on my commute — I’m down to about 45 to 50% by the time I get home around 7 pm. </p><p>That’s pretty solid for one of Samsung’s first silicon carbon batteries.</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bDJUk5j4owJX4KvApygKBk" name="Samsung Galaxy Z Fold 8--5" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/bDJUk5j4owJX4KvApygKBk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The best thing I can say about the Galaxy Z Fold 8 is that it’s really growing on me. My initial skepticism around why the world needs a wide foldable phone has now all but been erased. And despite how Samsung is marketing this device as an ultimate content consumption phone I think it’s a great device for productivity. </p><p>You can still run up to three apps at once like on the Fold 8 Ultra. You just don’t get the same height for fitting more content on screen, though flipping around to 3:4 mode helps for the main display. I think this could very well be the foldable to beat, and the upcoming iPhone Ultra has a high bar to clear.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/ive-been-living-with-the-galaxy-z-fold-8-for-3-weeks-and-i-was-wrong</link>
                                                                            <description>
                            <![CDATA[ I’ve spent a lot of time using the Samsung Galaxy Z Fold 8, and many of the so-called cons pale in comparison to how good this foldable phone actually feels and and works in everyday life. Here’s my updated pros and cons. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">fdtw7nPYTr6mhqtawZZYKV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/xKVKRBo6b2JwL3kkRiuBCk-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 14 Aug 2026 07:15:00 +0000</pubDate>                                                                                                                                <updated>Fri, 14 Aug 2026 12:15:06 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo-320-70.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/xKVKRBo6b2JwL3kkRiuBCk-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/xKVKRBo6b2JwL3kkRiuBCk-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If there’s one thing I’ve learned in testing phones for over 20 years, it’s that there’s a difference between reviewing a device and living with it. And now that I’ve spent three weeks 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</a>, I can say that my opinion has changed and that I was right about some things — and wrong about some others.</p><h2 id="the-cameras-are-good-enough">The cameras are good 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="c7J7KZ5TxP3SDSB6ALAg2k" name="Samsung Galaxy Z Fold 8--6" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/c7J7KZ5TxP3SDSB6ALAg2k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>First, let’s talk about the cameras. I stand by what I initially wrote about it being a bummer that the Fold 8 doesn’t have a telephoto zoom. For $1,900 you deserve one. But I have since tested the <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"><u>Fold 8 vs the 3x optical zoom on the Fold 8 Ultra</u></a> in a series of tests and I didn’t notice a huge difference until I got to 10x.</p><p>My point here is that you can more than get by with the Fold 8’s dual rear shooters. And I especially appreciate the improved low-light performance versus the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"><u>Fold 7</u></a>. The Nightography is just better.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/jnafuqsfupeaSFjL8qo5zj-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zs9fisEBmvsJDfWkYetdAk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/78txuj8kx9KcDFHxJ3fB7k-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/P6qeQHWiWXPmgMCv4LtZDk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Su2cj7sQBhiLcjkNw2zjCk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>If you really care about zoom performance, you’re better off getting the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review"><u>Samsung Galaxy S26 Ultra</u></a> and its 5x optical zoom, or going with a different foldable altogether 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"><u>Google Pixel 11 Pro Fold</u></a>, which also packs a 5x telephoto. </p><div class="product"><a data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="vZVLkgJrMPPWhKGBnWrT63" name="9Rhpe6TtrVFSNo9Vtn27Tm" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vZVLkgJrMPPWhKGBnWrT63-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,000 off w/ trade-in @ Samsung</strong></a><br>Samsung is knocking up to $1,000 off Galaxy Z Fold 8 preorders when you trade-in an older phone. The phone features an 7.6-inch OLED main display, 5.5-inch cover screen, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8 review</a>, we called it our favorite foldable to date. It loses the telephoto zoom, but you get a greatly reduced crease, brighter main screen and lighter design.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><h2 id="no-flex-view-is-not-a-dealbreaker">No Flex View is not a dealbreaker</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3806px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yy29a3yqPwGSdSqoT7oPPX" name="Galaxy Z Fold 8-9" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/yy29a3yqPwGSdSqoT7oPPX-1920-80.jpg" mos="" align="middle" fullscreen="" width="3806" height="2141" 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 ability to use your foldable phone as a mini laptop certainly comes in handy, but the Fold 8 ditches this feature because of the way the hinge is designed. So, for example, you can’t play videos with the content up top and controls down below. Or take a Google Meet call without having to hold the phone.</p><p>It’s a bummer, but at least there’s a hands-free alternative for watching videos. You can just use the outer display on the Fold 8 and put it in tent mode. It’s a nifty way for me to catch up on that day’s First Take episode while I’m on lunch break at work or doing the dishes.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exVp2O"></div>                            </div>                            <script src="https://kwizly.com/embed/exVp2O.js" async></script><h2 id="tiktok-is-dangerously-addictive-youtube-shorts-needs-a-fix">TikTok Is dangerously addictive. YouTube Shorts needs a fix</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="nrCY8poLdeA4rgB6PXAX9k" name="Samsung Galaxy Z Fold 8--10" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/nrCY8poLdeA4rgB6PXAX9k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I admit that I scroll on TikTok way too much, but my addiction has gotten worse on the Fold 8. That’s because the front display is perfect for snacking content while I’m waiting for my bus ride home.</p><p>Open up to the main 7.6-inch display, and TikTok is even better if you love to read comments. They pop in from the right side in a dual-pane format. Even better, as you scroll through TikTok’s with the comments upon, they’ll automatically refresh for each video.</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="YH4cXbfN7jtTxuwSe7HsCk" name="Samsung Galaxy Z Fold 8--9" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/YH4cXbfN7jtTxuwSe7HsCk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Too bad YouTube Shorts isn’t similarly optimized. You have to X out of the comments before you scroll to the next video, which is dumb. This also speaks to my issue with apps in general on the Galaxy Fold — too many aren’t optimized for the wider display. It’s something Samsung is going to have to fix, because you know Apple will be working with developers to make sure apps look amazing on the iPhone Fold/Ultra.</p><h2 id="the-shape-is-just-right-but-not-in-my-pocket">The shape is just right (but not in my pocket)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MSbku8TL3Wz9tTKEpq2AwU" name="Galaxy Z Fold 8 pants" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/MSbku8TL3Wz9tTKEpq2AwU-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Initially I thought the Galaxy Z Fold 8 might be awkwardly wide when closed, especially when trying to use the phone quickly with one hand to scroll through notifications. But overall I haven’t had any issues, and I find myself responding to Slack messages on the cover display all the time.</p><p>When I’m on the go, however, I’ve found that the wide design of the Fold 8 is actually not as comfy in my front pocket as the Fold 8 Ultra. The former’s wider body is a bit more awkward when I’m walking. So I often put the Fold 8 in my back pocket instead.</p><h2 id="it-s-my-new-favorite-e-reader">It’s my new favorite e-reader</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="MaDJdLutEFff7YMHqdY89k" name="Samsung Galaxy Z Fold 8--11" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/MaDJdLutEFff7YMHqdY89k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I’ve been trying to get back into reading more, starting with Joanna Stern’s <a href="https://www.amazon.com/Am-Not-Robot-Almost-Everything/dp/0063446618"><u>“I Am Not a Robot,”</u></a> which is about her journey of using nothing but AI tools for a year. And the Fold 8 is the perfect e-reader stand-in for two reasons. </p><p>One, when you flip around the main display you get a 3:4 aspect ratio that’s very Kindle-like. And, two, the anti-reflective coating makes reading outside a lot easier than I thought. There’s a lot less glare than previous 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PopQKSSXA7u8J8bvFcYMBk" name="Samsung Galaxy Z Fold 8--7" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/PopQKSSXA7u8J8bvFcYMBk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Plus, as I get ready for “Avengers: Doomsday,” I asked Gemini which Marvel comics I should be ready to get up to speed on Dr. Doom’s origin and powers. So I subscribed to Marvel Ultimate and I find the Fold 8 is a pretty sweet format for diving in.</p><h2 id="how-good-is-the-battery-life">How good is the 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hQ292cJhTMbbBXemmfWj7k" name="Samsung Galaxy Z Fold 8--8" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/hQ292cJhTMbbBXemmfWj7k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Now that I’ve been using the Fold 8 as a daily driver, I’ve discovered that it has pretty good staying power. On most days starting at 7 am with moderate usage — which includes streaming Spotify on the go, checking Slack and email, and watching videos to and from on my commute — I’m down to about 45 to 50% by the time I get home around 7 pm. </p><p>That’s pretty solid for one of Samsung’s first silicon carbon batteries.</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bDJUk5j4owJX4KvApygKBk" name="Samsung Galaxy Z Fold 8--5" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/bDJUk5j4owJX4KvApygKBk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The best thing I can say about the Galaxy Z Fold 8 is that it’s really growing on me. My initial skepticism around why the world needs a wide foldable phone has now all but been erased. And despite how Samsung is marketing this device as an ultimate content consumption phone I think it’s a great device for productivity. </p><p>You can still run up to three apps at once like on the Fold 8 Ultra. You just don’t get the same height for fitting more content on screen, though flipping around to 3:4 mode helps for the main display. I think this could very well be the foldable to beat, and the upcoming iPhone Ultra has a high bar to clear.</p>
                                                            </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-1920-80.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-1920-80.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-1920-80.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-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: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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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-1920-80.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-1920-80.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-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: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-1920-80.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-1920-80.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-1920-80.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-320-70.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-320-70.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-320-70.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-320-70.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-2">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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-2">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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-320-70.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="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-320-70.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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[ I pushed the latest foldables from Samsung, Motorola and Honor into a no‑mercy battle royale and there was one clear winner ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The last couple of months have seen the arrival of some seriously high-profile book-style foldable devices, with brands like Samsung, Motorola and Honor looking to set the standard before the imminent release of Apple’s first foldable, which some expect will be called <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-rumors-everything-you-need-to-know-about-the-foldable-iphone">iPhone Ultra</a>.</p><p>I’ve got 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</a>, the <a href="https://www.tomsguide.com/phones/android-phones/honor-magic-v6-hands-on-review">Honor Magic V6</a> and the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a> lined up for testing — three of the most premium foldables of the year, each aiming for the same spotlight. They all promise big screens, big versatility and big leaps forward, but once you start living with them, the differences come into focus fast.</p><p>I’m putting them through the same tests: design, cameras, battery life, multitasking and everyday use. By the end, one of these foldables will stand out as the clear winner — not because of hype, but because it genuinely earns the spot.</p><div data-model-name="Samsung Galaxy Z Fold 8,Motorola Razr Fold,Honor Magic V6" data-widget-type="multimodelreview" data-product-types="deals"></div><h2 id="galaxy-z-fold-8-vs-razr-fold-vs-magic-v6-design">Galaxy Z Fold 8 vs Razr Fold vs Magic V6: Design</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cUeuDRhuwnySJ3H8boQrV7" name="foldables face-off 1" alt="Three foldables, Samsung Galaxy Z Fold 8, Honor Magic V6 and Motorola Razr Fold on a desk." src="https://cdn.mos.cms.futurecdn.net/cUeuDRhuwnySJ3H8boQrV7-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>In terms of design, Samsung’s Galaxy Z Fold 8 feels like it’s finally cracked the code on what a book‑style foldable should be, though its short‑and‑wide design won’t be for everyone. Closed, it measures 153.5 x 68.1 x 12.1mm, which makes it noticeably shorter than most slab phones but still basically as wide as a Galaxy S26 Ultra. That width gives the cover screen a more natural feel for typing and scrolling, even if the squat shape takes a day or two to get used to. </p><p>At 201g, the Galaxy Z Fold 8 is the lightest in its class, and when you pair that with sharp, squared‑off corners, it makes the device feel significantly more modern than the other two foldables in this face‑off. As for its hinge, it opens with a clean, confident motion and unfolds almost perfectly flat. On top of that, Samsung’s titanium plate and gapless micro‑perforated display stack have drastically minimised the crease — you can still feel it if you go looking for it, but visually it’s so faint that you forget it’s there within minutes. Combined with a new anti‑reflective coating, the Z Fold 8’s main display looks more like a single sheet of glass than a foldable screen. For me, it’s the first time a foldable has felt this seamless.</p><p>Motorola’s Razr Fold takes a very different path, leaning into toughness rather than elegance. It’s noticeably heavier at 243 grams, and you feel that extra weight the moment you pick it up, but it’s the kind of heft that makes the phone seem more durable. It boasts a titanium inner plate, stainless steel hinge and Gorilla Glass Ceramic 3, all contributing to a chassis that feels reinforced in a way most foldables don’t. Even when opened, the Razr Fold stays impressively thin at 4.55mm, though its crease is far more noticeable than on the Galaxy Z Fold 8. </p><p>The Razr Fold's hinge doesn’t have the snappy, almost playful motion of the Galaxy Z Fold 8 — it’s firmer, more deliberate, built to hold its position rather than glide. And while the Razr Fold technically shares the same IP48/IP49 protection class as Samsung, its overall construction feels more rugged and less fragile. It’s not the most stylish or pocket‑friendly design, but it’s the one that gives you the most confidence that it’ll survive being used like a normal phone rather than a delicate gadget.</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="KhD9iSXBnCviywUe788WV7" name="foldables face-off 3" alt="Three foldables, Samsung Galaxy Z Fold 8, Honor Magic V6 and Motorola Razr Fold on a desk." src="https://cdn.mos.cms.futurecdn.net/KhD9iSXBnCviywUe788WV7-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Meanwhile, Honor’s Magic V6 sits somewhere in the middle. It’s clean, understated, and very thin — 8.75mm closed, 4mm open — and while the huge round camera array keeps it from looking as sleek as Samsung’s device, it still feels more balanced than the Razr Fold. Its “Super Steel” hinge is nicely engineered, and its use of anti‑reflective silicon nitride layers gives both displays a soft, matte look that’s easy on the eyes. The crease is 44% shallower than its predecessor, the Magic V5, though it's still fairly noticeable, both in look and feel. It's also between its competitors in terms of heft, weighing in at 219 grams. </p><p>In terms of visual appeal, the white Magic V6 I'm testing is clean but a little clinical — especially compared to the red vegan leather version shown in our hands‑on review. In other words, it’s sleek, but also a little boring. It also boasts an IP68/IP69 dust and water resistance rating, putting it ahead of its competitors in that regard.</p><p>One more thing — there’s one important feature that both the Magic V6 and the Razr Fold boast over Galaxy Z Fold 8: they both offer stylus support. Better still, each device supports stylus input on both their inner and outer displays. I wasn’t able to test this myself, but that functionality is sure to be a major selling point for anyone still frustrated that Samsung removed the feature from its Fold lineup.</p><p>Still, the Galaxy Z Fold 8 is the only one that nails every essential practical design metric at once: thinness, weight, hinge feel, crease reduction and pocketability. It’s the foldable that feels the most polished and the most effortless to live with day‑to‑day — not because it’s flashy, but because it finally behaves like a normal phone when you want it to, and a big screen when you need it.</p><p><strong>WINNER:</strong> Samsung Galaxy Z Fold 8</p><p><strong>Runner-up: </strong>Honor Magic V6</p><h2 id="galaxy-z-fold-8-vs-razr-fold-vs-magic-v6-cameras">Galaxy Z Fold 8 vs Razr Fold vs Magic V6: Cameras</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4096px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="L4UsuF25LxQuvgzXrAe2YL" name="foldables face-off 4" alt="Three foldables from left to right, Motorola Razr Fold, Honor Magic V6 and Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/L4UsuF25LxQuvgzXrAe2YL-1920-80.jpg" mos="" align="middle" fullscreen="" width="4096" height="2304" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Given that all three foldables are premium devices, it’s not surprising that they can all take good photos. That said, one consistently delivered great snaps in my testing. Samsung plays it safe, Motorola pushes ahead in ways I didn’t expect, and Honor lands somewhere in the middle — but which one takes the photography crown?</p><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td><td  ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p><strong>Honor Magic V6</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Main Camera</strong></p></td><td  ><p>50MP (f/1.8)</p></td><td  ><p>50MP (f/1.6)</p></td><td  ><p>50MP (f/1.6)</p></td></tr><tr><td class="firstcol " ><p><strong>Ultrawide Camera</strong></p></td><td  ><p>50MP (f/1.9)</p></td><td  ><p>50MP (f/2.0)</p></td><td  ><p>50MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Telephoto Cameras</strong></p></td><td  ><p>N/A</p></td><td  ><p>50MP (f/2.4)(periscope telephoto)</p></td><td  ><p>64MP (f/2.5) (periscope telephoto)</p></td></tr><tr><td class="firstcol " ><p><strong>Zoom Range</strong></p></td><td  ><p>Up to 10x Digital Zoom</p></td><td  ><p>Up to 100x Super Zoom pro, 3x Optical Zoom</p></td><td  ><p>Up to 100x Digital Zoom, 3x Optical Zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Cameras</strong></p></td><td  ><p>Cover: 10MP (f/2.2) Inner: 10 MP (f/2.2)</p></td><td  ><p>Cover: 20MP (f/2.4) Inner: 32MP (f/2.4)</p></td><td  ><p>Cover: 20MP (f/2.2)<br>Inner: 20MP (f/2.2)</p></td></tr></tbody></table></div><p>Samsung’s Galaxy Z Fold 8 delivers a camera experience that feels familiar but polished. The two 50MP rear cameras produce rich colors and excellent dynamic range, and the upgraded ultrawide is noticeably sharper than last year’s model. Low‑light photos also come out brighter and sharper, with better control over noise and blown‑out highlights. The only real drawback is zoom — without a telephoto lens, detail drops off quickly once you push past 4x, making the Galaxy Z Fold 8 Ultra a better option for those who value that more.</p><p>The Motorola Razr Fold is the one that genuinely surprised me. Its triple‑50MP setup produces crisp, vibrant photos with far more texture than I expected, and the 3x optical telephoto instantly gives it an edge over the other two. Motorola’s Super Zoom Pro also works better than I anticipated, keeping long‑range shots surprisingly clean. Low‑light performance is strong as well, with balanced exposures that avoid Samsung’s occasional brightness push.</p><p>Honor’s Magic V6 sits somewhere between the other two. The hardware is strong — a 50MP main, 50MP ultrawide and a 64MP periscope telephoto with 3x optical zoom — and Honor’s AiMAGE Color Engine generally produces natural, accurate colours. The telephoto lens gives the V6 decent reach, but the tuning doesn’t feel quite as confident as Samsung’s or as punchy as Motorola’s. I also noticed a bit of artificial “sweetening” in portrait shots, with skin smoothing that’s more aggressive than I’d prefer. It’s a capable camera system, just not the standout feature of the phone.</p><p>Across all three, the Razr Fold still comes out on top. Honor’s 64MP periscope telephoto gives the Magic V6 real reach, and Samsung remains strong in dynamic range and low‑light, but Motorola’s results are consistently sharper, cleaner and more confident across every scenario. It’s the foldable I’d reach for if cameras matter most.</p><p><strong>WINNER: </strong>Motorola Razr Fold</p><p><strong>Runner-up: </strong>Honor Magic V6</p><h2 id="galaxy-z-fold-8-vs-razr-fold-vs-magic-v6-battery-life">Galaxy Z Fold 8 vs Razr Fold vs Magic V6: Battery life</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YDHqDVy3SYnAbK3EpsDEUS" name="Motorola Razr Fold" alt="In-hand image of the Motorola Razr Fold in unfolded mode" src="https://cdn.mos.cms.futurecdn.net/YDHqDVy3SYnAbK3EpsDEUS-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Battery life is one of the biggest practical differences among these three foldables. All of them can comfortably last a day, but how much they have left at bedtime varies. Samsung finally feels reliable, Motorola pushes endurance further than anyone else, and Honor’s huge battery delivers surprisingly strong results in my own testing.</p><p>Samsung’s Galaxy Z Fold 8 is the most balanced of the bunch. The move to a 4,800 mAh silicon‑carbon battery pays off: in Tom’s Guide’s 5G web‑surfing test, it lasted 12 hours and 19 minutes, a solid jump from the Fold 7’s 10:44. In day‑to‑day use, I could get through a full day of email, photos and music and still end up around the 50% mark. Charging is faster too — 70% in 30 minutes — and unlike the others, you can hit those speeds with any standard fast-charging adapter you’ll find on Amazon, not a proprietary brick.</p><p>The Motorola Razr Fold is the endurance monster. Motorola fits a 6,000 mAh battery inside a body that doesn’t feel any heavier, and the results are wild. Tom’s Guide measured 14 hours and 44 minutes, the best battery life of any book‑style foldable they’ve tested. Charging is equally impressive: 42% in 15 minutes and 75% in 30 minutes with 80W wired charging — but you’ll need either Motorola’s 80W TurboPower charger, which isn’t included in the box in Australia and which I don’t have access to, or a super fast charging adapter (100w or above, according to online users) to reach those headline numbers.</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="iqYxn9huHzbqNdt2b8AzDY" name="Honor Magic V6" alt="In-hand image of Honor Magic V6 in unfolded form" src="https://cdn.mos.cms.futurecdn.net/iqYxn9huHzbqNdt2b8AzDY-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Honor’s Magic V6 goes even bigger in capacity with a 6,660 mAh silicon‑carbon battery, the largest of any foldable right now. Tom’s Guide hasn’t run its full battery test yet, but in my own PCMark Work 3.0 battery test, the V6 lasted just under 14 hours, putting it right in line with Motorola’s excellent endurance. It also supports 80W wired and 66W wireless charging, though you’ll need Honor‑approved chargers to reach those peak speeds. It’s a genuinely long‑lasting device, and the huge battery pays off.</p><p>Across all three, the Razr Fold still feels like the endurance king thanks to its combination of runtime and charging speed. Samsung delivers dependable all‑day life with faster top‑ups on standard chargers, and Honor’s massive battery gives it impressive stamina, but the Razr Fold is the foldable I’d trust most when I’m away from a charger.</p><p><strong>WINNER: </strong>Motorola Razr Fold</p><p><strong>Runner-up: </strong>Honor Magic V6</p><h2 id="galaxy-z-fold-8-vs-razr-fold-vs-magic-v6-multitasking">Galaxy Z Fold 8 vs Razr Fold vs Magic V6: Multitasking</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uPTKMQxuUtji6eqJK93vBf" name="Galaxy Z Fold 8 multitasking" alt="Unfolded Samsung Galaxy Z Fold 8 on desk demonstrating multitasking capability" src="https://cdn.mos.cms.futurecdn.net/uPTKMQxuUtji6eqJK93vBf-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>When it comes to multitasking, what really separates these three foldables isn’t the size of their screens — it’s the software experience. Samsung is the only one that feels like it’s been iterating on multitasking for years, and the Z Fold 8 is a testament to that. The moment you open two apps side‑by‑side, everything snaps into place with a kind of smoothness that the Razr Fold and Magic V6 don’t quite match.</p><p>On the Galaxy Z Fold 8, multitasking feels natural. The wider 4:3 inner display gives apps room to breathe, but it’s Samsung’s software polish that makes the difference. Dragging an app into split‑screen is instant, resizing windows is smooth, and the new AI‑powered suggestions — like the Calendar icon that appears when someone messages you about plans — make it feel like the phone is really helping you get work done. It’s the only foldable here where running multiple apps at once feels like a core part of the experience rather than a feature buried in menus. Admittedly, the added height of the Z Fold 8 Ultra makes it better suited to running three or more apps at once, but for two apps side‑by‑side, the Z Fold 8 is brilliant.</p><p>Motorola’s Razr Fold is fast, and the Snapdragon 8 Elite keeps everything responsive, but the multitasking tools aren’t as refined. Split‑screen works and is perfectly usable, but the narrower layout and simpler window controls make it feel more like a phone doing its best rather than a device designed around productivity. It’s great for quick side‑by‑side tasks, but it doesn’t encourage deeper multitasking the way Samsung does.</p><p>Honor’s Magic V6 gives you plenty of screen real estate, and its floating windows and split‑screen options are capable, but the software doesn’t feel as cohesive. Some apps don’t adapt as cleanly, and the workflow lacks the small quality‑of‑life touches that make Samsung’s approach feel effortless. It’s powerful, but not as intuitive.</p><p>Across all three, Samsung is the multitasking standout. Motorola is fast but less flexible, and Honor has the space but not the same polish. If you want a foldable that genuinely feels built for productivity, the Galaxy Z Fold 8 is the one that performed best for me.</p><p><strong>WINNER:</strong> Samsung Galaxy Z Fold 8</p><p><strong>Runner-up:</strong> Motorola Razr Fold</p><h2 id="galaxy-z-fold-8-vs-razr-fold-vs-magic-v6-everyday-use">Galaxy Z Fold 8 vs Razr Fold vs Magic V6: Everyday use</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DFXjpwrQUPfAW54nMm3Zv9" name="Samsung Galaxy Z Fold 8" alt="In-hand image of Samsung Galaxy Z Fold 8 in folded mode" src="https://cdn.mos.cms.futurecdn.net/DFXjpwrQUPfAW54nMm3Zv9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Of the three foldables tested here, the Galaxy Z Fold 8 felt the most natural for me to use on a day-to-day basis. It boasts a level of refinement that can only come from several generations of folding devices. The outer display is finally wide enough that you can stay there for most tasks without feeling cramped, and the anti‑reflective coating makes both screens easier to view outdoors. At this stage, you could say that Samsung’s approach to foldables feels predictable, but that’s not a bad thing — it just means that the learning curve that comes with using a foldable is a thing of the past. Apps typically behave how you expect them to, gestures feel natural, and the whole device has a rock-solid level of polish that makes it feel like a normal phone that happens to unfold into something bigger. And though I resisted its new dimensions at first, the Z Fold 8’s passport-like shape and slim design place the device in a perfect sweet spot for both pocketability and unfolded use.</p><p>The Razr Fold is the next best in everyday use. It’s light, easy to carry, and Motorola’s outer display is genuinely helpful for quick interactions. The software stays out of your way, and the phone feels relaxed in a way Samsung’s more structured approach doesn’t. It’s not quite as polished — every now and then an app won’t scale perfectly, or a layout will feel a bit tight — but most of the time it’s a pleasure to use.</p><p>Honor’s Magic V6 is a different story. The hardware is great, but the software often feels like it’s borrowing ideas from iOS, which can make everyday use feel a little unfamiliar if you’ve spent years inside Android’s usual rhythms. Some gestures behave differently than you expect, certain menus have that Apple‑style rounded translucency, and a few system animations lean more toward looking pretty than helping you get somewhere faster. None of this is inherently flawed — it’s just a different approach — but it can feel slightly awkward until you adjust.</p><p><strong>OVERALL WINNER:</strong> Samsung Galaxy Z Fold 8</p><p><strong>Runner-up:</strong> Motorola Razr Fold</p><p>Of the three, the Galaxy Z Fold 8 feels the most natural in everyday use. The Razr Fold is a strong second thanks to its great camera system and friendly, durable design, while the Magic V6 is powerful but feels better suited to fans of Apple’s software. If you want a foldable that behaves like a great phone first and a big screen second, Samsung is the one that gets it right.</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/android-phones/i-pushed-the-latest-foldables-from-samsung-motorola-and-honor-into-a-no-mercy-battle-royale-and-there-can-be-only-one-winner</link>
                                                                            <description>
                            <![CDATA[ Between Samsung’s Galaxy Z Fold 8, Motorola’s Razr Fold and Honor’s Magic V6, which book-style foldable will come out on top? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">7C9wTiNvet6mFrF8p9r9xL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Zoe5EBZnpJePiBGGdBjTB7-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 11 Aug 2026 02:06:50 +0000</pubDate>                                                                                                                                <updated>Thu, 13 Aug 2026 23:29:03 +0000</updated>
                                                                                                                                            <category><![CDATA[Android Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Stephen Lambrechts ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/JN3jEQpqyyt32as8AJJqXe-320-70.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/Zoe5EBZnpJePiBGGdBjTB7-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Three foldables, Samsung Galaxy Z Fold 8, Honor Magic V6 and Motorola Razr Fold on a desk.]]></media:description>                                                            <media:text><![CDATA[Three foldables, Samsung Galaxy Z Fold 8, Honor Magic V6 and Motorola Razr Fold on a desk.]]></media:text>
                                <media:title type="plain"><![CDATA[Three foldables, Samsung Galaxy Z Fold 8, Honor Magic V6 and Motorola Razr Fold on a desk.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Zoe5EBZnpJePiBGGdBjTB7-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The last couple of months have seen the arrival of some seriously high-profile book-style foldable devices, with brands like Samsung, Motorola and Honor looking to set the standard before the imminent release of Apple’s first foldable, which some expect will be called <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-rumors-everything-you-need-to-know-about-the-foldable-iphone">iPhone Ultra</a>.</p><p>I’ve got 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</a>, the <a href="https://www.tomsguide.com/phones/android-phones/honor-magic-v6-hands-on-review">Honor Magic V6</a> and the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a> lined up for testing — three of the most premium foldables of the year, each aiming for the same spotlight. They all promise big screens, big versatility and big leaps forward, but once you start living with them, the differences come into focus fast.</p><p>I’m putting them through the same tests: design, cameras, battery life, multitasking and everyday use. By the end, one of these foldables will stand out as the clear winner — not because of hype, but because it genuinely earns the spot.</p><div data-model-name="Samsung Galaxy Z Fold 8,Motorola Razr Fold,Honor Magic V6" data-widget-type="multimodelreview" data-product-types="deals"></div><h2 id="galaxy-z-fold-8-vs-razr-fold-vs-magic-v6-design">Galaxy Z Fold 8 vs Razr Fold vs Magic V6: Design</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cUeuDRhuwnySJ3H8boQrV7" name="foldables face-off 1" alt="Three foldables, Samsung Galaxy Z Fold 8, Honor Magic V6 and Motorola Razr Fold on a desk." src="https://cdn.mos.cms.futurecdn.net/cUeuDRhuwnySJ3H8boQrV7-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>In terms of design, Samsung’s Galaxy Z Fold 8 feels like it’s finally cracked the code on what a book‑style foldable should be, though its short‑and‑wide design won’t be for everyone. Closed, it measures 153.5 x 68.1 x 12.1mm, which makes it noticeably shorter than most slab phones but still basically as wide as a Galaxy S26 Ultra. That width gives the cover screen a more natural feel for typing and scrolling, even if the squat shape takes a day or two to get used to. </p><p>At 201g, the Galaxy Z Fold 8 is the lightest in its class, and when you pair that with sharp, squared‑off corners, it makes the device feel significantly more modern than the other two foldables in this face‑off. As for its hinge, it opens with a clean, confident motion and unfolds almost perfectly flat. On top of that, Samsung’s titanium plate and gapless micro‑perforated display stack have drastically minimised the crease — you can still feel it if you go looking for it, but visually it’s so faint that you forget it’s there within minutes. Combined with a new anti‑reflective coating, the Z Fold 8’s main display looks more like a single sheet of glass than a foldable screen. For me, it’s the first time a foldable has felt this seamless.</p><p>Motorola’s Razr Fold takes a very different path, leaning into toughness rather than elegance. It’s noticeably heavier at 243 grams, and you feel that extra weight the moment you pick it up, but it’s the kind of heft that makes the phone seem more durable. It boasts a titanium inner plate, stainless steel hinge and Gorilla Glass Ceramic 3, all contributing to a chassis that feels reinforced in a way most foldables don’t. Even when opened, the Razr Fold stays impressively thin at 4.55mm, though its crease is far more noticeable than on the Galaxy Z Fold 8. </p><p>The Razr Fold's hinge doesn’t have the snappy, almost playful motion of the Galaxy Z Fold 8 — it’s firmer, more deliberate, built to hold its position rather than glide. And while the Razr Fold technically shares the same IP48/IP49 protection class as Samsung, its overall construction feels more rugged and less fragile. It’s not the most stylish or pocket‑friendly design, but it’s the one that gives you the most confidence that it’ll survive being used like a normal phone rather than a delicate gadget.</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="KhD9iSXBnCviywUe788WV7" name="foldables face-off 3" alt="Three foldables, Samsung Galaxy Z Fold 8, Honor Magic V6 and Motorola Razr Fold on a desk." src="https://cdn.mos.cms.futurecdn.net/KhD9iSXBnCviywUe788WV7-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Meanwhile, Honor’s Magic V6 sits somewhere in the middle. It’s clean, understated, and very thin — 8.75mm closed, 4mm open — and while the huge round camera array keeps it from looking as sleek as Samsung’s device, it still feels more balanced than the Razr Fold. Its “Super Steel” hinge is nicely engineered, and its use of anti‑reflective silicon nitride layers gives both displays a soft, matte look that’s easy on the eyes. The crease is 44% shallower than its predecessor, the Magic V5, though it's still fairly noticeable, both in look and feel. It's also between its competitors in terms of heft, weighing in at 219 grams. </p><p>In terms of visual appeal, the white Magic V6 I'm testing is clean but a little clinical — especially compared to the red vegan leather version shown in our hands‑on review. In other words, it’s sleek, but also a little boring. It also boasts an IP68/IP69 dust and water resistance rating, putting it ahead of its competitors in that regard.</p><p>One more thing — there’s one important feature that both the Magic V6 and the Razr Fold boast over Galaxy Z Fold 8: they both offer stylus support. Better still, each device supports stylus input on both their inner and outer displays. I wasn’t able to test this myself, but that functionality is sure to be a major selling point for anyone still frustrated that Samsung removed the feature from its Fold lineup.</p><p>Still, the Galaxy Z Fold 8 is the only one that nails every essential practical design metric at once: thinness, weight, hinge feel, crease reduction and pocketability. It’s the foldable that feels the most polished and the most effortless to live with day‑to‑day — not because it’s flashy, but because it finally behaves like a normal phone when you want it to, and a big screen when you need it.</p><p><strong>WINNER:</strong> Samsung Galaxy Z Fold 8</p><p><strong>Runner-up: </strong>Honor Magic V6</p><h2 id="galaxy-z-fold-8-vs-razr-fold-vs-magic-v6-cameras">Galaxy Z Fold 8 vs Razr Fold vs Magic V6: Cameras</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4096px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="L4UsuF25LxQuvgzXrAe2YL" name="foldables face-off 4" alt="Three foldables from left to right, Motorola Razr Fold, Honor Magic V6 and Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/L4UsuF25LxQuvgzXrAe2YL-1920-80.jpg" mos="" align="middle" fullscreen="" width="4096" height="2304" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Given that all three foldables are premium devices, it’s not surprising that they can all take good photos. That said, one consistently delivered great snaps in my testing. Samsung plays it safe, Motorola pushes ahead in ways I didn’t expect, and Honor lands somewhere in the middle — but which one takes the photography crown?</p><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td><td  ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p><strong>Honor Magic V6</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Main Camera</strong></p></td><td  ><p>50MP (f/1.8)</p></td><td  ><p>50MP (f/1.6)</p></td><td  ><p>50MP (f/1.6)</p></td></tr><tr><td class="firstcol " ><p><strong>Ultrawide Camera</strong></p></td><td  ><p>50MP (f/1.9)</p></td><td  ><p>50MP (f/2.0)</p></td><td  ><p>50MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Telephoto Cameras</strong></p></td><td  ><p>N/A</p></td><td  ><p>50MP (f/2.4)(periscope telephoto)</p></td><td  ><p>64MP (f/2.5) (periscope telephoto)</p></td></tr><tr><td class="firstcol " ><p><strong>Zoom Range</strong></p></td><td  ><p>Up to 10x Digital Zoom</p></td><td  ><p>Up to 100x Super Zoom pro, 3x Optical Zoom</p></td><td  ><p>Up to 100x Digital Zoom, 3x Optical Zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Cameras</strong></p></td><td  ><p>Cover: 10MP (f/2.2) Inner: 10 MP (f/2.2)</p></td><td  ><p>Cover: 20MP (f/2.4) Inner: 32MP (f/2.4)</p></td><td  ><p>Cover: 20MP (f/2.2)<br>Inner: 20MP (f/2.2)</p></td></tr></tbody></table></div><p>Samsung’s Galaxy Z Fold 8 delivers a camera experience that feels familiar but polished. The two 50MP rear cameras produce rich colors and excellent dynamic range, and the upgraded ultrawide is noticeably sharper than last year’s model. Low‑light photos also come out brighter and sharper, with better control over noise and blown‑out highlights. The only real drawback is zoom — without a telephoto lens, detail drops off quickly once you push past 4x, making the Galaxy Z Fold 8 Ultra a better option for those who value that more.</p><p>The Motorola Razr Fold is the one that genuinely surprised me. Its triple‑50MP setup produces crisp, vibrant photos with far more texture than I expected, and the 3x optical telephoto instantly gives it an edge over the other two. Motorola’s Super Zoom Pro also works better than I anticipated, keeping long‑range shots surprisingly clean. Low‑light performance is strong as well, with balanced exposures that avoid Samsung’s occasional brightness push.</p><p>Honor’s Magic V6 sits somewhere between the other two. The hardware is strong — a 50MP main, 50MP ultrawide and a 64MP periscope telephoto with 3x optical zoom — and Honor’s AiMAGE Color Engine generally produces natural, accurate colours. The telephoto lens gives the V6 decent reach, but the tuning doesn’t feel quite as confident as Samsung’s or as punchy as Motorola’s. I also noticed a bit of artificial “sweetening” in portrait shots, with skin smoothing that’s more aggressive than I’d prefer. It’s a capable camera system, just not the standout feature of the phone.</p><p>Across all three, the Razr Fold still comes out on top. Honor’s 64MP periscope telephoto gives the Magic V6 real reach, and Samsung remains strong in dynamic range and low‑light, but Motorola’s results are consistently sharper, cleaner and more confident across every scenario. It’s the foldable I’d reach for if cameras matter most.</p><p><strong>WINNER: </strong>Motorola Razr Fold</p><p><strong>Runner-up: </strong>Honor Magic V6</p><h2 id="galaxy-z-fold-8-vs-razr-fold-vs-magic-v6-battery-life">Galaxy Z Fold 8 vs Razr Fold vs Magic V6: Battery life</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YDHqDVy3SYnAbK3EpsDEUS" name="Motorola Razr Fold" alt="In-hand image of the Motorola Razr Fold in unfolded mode" src="https://cdn.mos.cms.futurecdn.net/YDHqDVy3SYnAbK3EpsDEUS-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Battery life is one of the biggest practical differences among these three foldables. All of them can comfortably last a day, but how much they have left at bedtime varies. Samsung finally feels reliable, Motorola pushes endurance further than anyone else, and Honor’s huge battery delivers surprisingly strong results in my own testing.</p><p>Samsung’s Galaxy Z Fold 8 is the most balanced of the bunch. The move to a 4,800 mAh silicon‑carbon battery pays off: in Tom’s Guide’s 5G web‑surfing test, it lasted 12 hours and 19 minutes, a solid jump from the Fold 7’s 10:44. In day‑to‑day use, I could get through a full day of email, photos and music and still end up around the 50% mark. Charging is faster too — 70% in 30 minutes — and unlike the others, you can hit those speeds with any standard fast-charging adapter you’ll find on Amazon, not a proprietary brick.</p><p>The Motorola Razr Fold is the endurance monster. Motorola fits a 6,000 mAh battery inside a body that doesn’t feel any heavier, and the results are wild. Tom’s Guide measured 14 hours and 44 minutes, the best battery life of any book‑style foldable they’ve tested. Charging is equally impressive: 42% in 15 minutes and 75% in 30 minutes with 80W wired charging — but you’ll need either Motorola’s 80W TurboPower charger, which isn’t included in the box in Australia and which I don’t have access to, or a super fast charging adapter (100w or above, according to online users) to reach those headline numbers.</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="iqYxn9huHzbqNdt2b8AzDY" name="Honor Magic V6" alt="In-hand image of Honor Magic V6 in unfolded form" src="https://cdn.mos.cms.futurecdn.net/iqYxn9huHzbqNdt2b8AzDY-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Honor’s Magic V6 goes even bigger in capacity with a 6,660 mAh silicon‑carbon battery, the largest of any foldable right now. Tom’s Guide hasn’t run its full battery test yet, but in my own PCMark Work 3.0 battery test, the V6 lasted just under 14 hours, putting it right in line with Motorola’s excellent endurance. It also supports 80W wired and 66W wireless charging, though you’ll need Honor‑approved chargers to reach those peak speeds. It’s a genuinely long‑lasting device, and the huge battery pays off.</p><p>Across all three, the Razr Fold still feels like the endurance king thanks to its combination of runtime and charging speed. Samsung delivers dependable all‑day life with faster top‑ups on standard chargers, and Honor’s massive battery gives it impressive stamina, but the Razr Fold is the foldable I’d trust most when I’m away from a charger.</p><p><strong>WINNER: </strong>Motorola Razr Fold</p><p><strong>Runner-up: </strong>Honor Magic V6</p><h2 id="galaxy-z-fold-8-vs-razr-fold-vs-magic-v6-multitasking">Galaxy Z Fold 8 vs Razr Fold vs Magic V6: Multitasking</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uPTKMQxuUtji6eqJK93vBf" name="Galaxy Z Fold 8 multitasking" alt="Unfolded Samsung Galaxy Z Fold 8 on desk demonstrating multitasking capability" src="https://cdn.mos.cms.futurecdn.net/uPTKMQxuUtji6eqJK93vBf-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>When it comes to multitasking, what really separates these three foldables isn’t the size of their screens — it’s the software experience. Samsung is the only one that feels like it’s been iterating on multitasking for years, and the Z Fold 8 is a testament to that. The moment you open two apps side‑by‑side, everything snaps into place with a kind of smoothness that the Razr Fold and Magic V6 don’t quite match.</p><p>On the Galaxy Z Fold 8, multitasking feels natural. The wider 4:3 inner display gives apps room to breathe, but it’s Samsung’s software polish that makes the difference. Dragging an app into split‑screen is instant, resizing windows is smooth, and the new AI‑powered suggestions — like the Calendar icon that appears when someone messages you about plans — make it feel like the phone is really helping you get work done. It’s the only foldable here where running multiple apps at once feels like a core part of the experience rather than a feature buried in menus. Admittedly, the added height of the Z Fold 8 Ultra makes it better suited to running three or more apps at once, but for two apps side‑by‑side, the Z Fold 8 is brilliant.</p><p>Motorola’s Razr Fold is fast, and the Snapdragon 8 Elite keeps everything responsive, but the multitasking tools aren’t as refined. Split‑screen works and is perfectly usable, but the narrower layout and simpler window controls make it feel more like a phone doing its best rather than a device designed around productivity. It’s great for quick side‑by‑side tasks, but it doesn’t encourage deeper multitasking the way Samsung does.</p><p>Honor’s Magic V6 gives you plenty of screen real estate, and its floating windows and split‑screen options are capable, but the software doesn’t feel as cohesive. Some apps don’t adapt as cleanly, and the workflow lacks the small quality‑of‑life touches that make Samsung’s approach feel effortless. It’s powerful, but not as intuitive.</p><p>Across all three, Samsung is the multitasking standout. Motorola is fast but less flexible, and Honor has the space but not the same polish. If you want a foldable that genuinely feels built for productivity, the Galaxy Z Fold 8 is the one that performed best for me.</p><p><strong>WINNER:</strong> Samsung Galaxy Z Fold 8</p><p><strong>Runner-up:</strong> Motorola Razr Fold</p><h2 id="galaxy-z-fold-8-vs-razr-fold-vs-magic-v6-everyday-use">Galaxy Z Fold 8 vs Razr Fold vs Magic V6: Everyday use</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DFXjpwrQUPfAW54nMm3Zv9" name="Samsung Galaxy Z Fold 8" alt="In-hand image of Samsung Galaxy Z Fold 8 in folded mode" src="https://cdn.mos.cms.futurecdn.net/DFXjpwrQUPfAW54nMm3Zv9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Of the three foldables tested here, the Galaxy Z Fold 8 felt the most natural for me to use on a day-to-day basis. It boasts a level of refinement that can only come from several generations of folding devices. The outer display is finally wide enough that you can stay there for most tasks without feeling cramped, and the anti‑reflective coating makes both screens easier to view outdoors. At this stage, you could say that Samsung’s approach to foldables feels predictable, but that’s not a bad thing — it just means that the learning curve that comes with using a foldable is a thing of the past. Apps typically behave how you expect them to, gestures feel natural, and the whole device has a rock-solid level of polish that makes it feel like a normal phone that happens to unfold into something bigger. And though I resisted its new dimensions at first, the Z Fold 8’s passport-like shape and slim design place the device in a perfect sweet spot for both pocketability and unfolded use.</p><p>The Razr Fold is the next best in everyday use. It’s light, easy to carry, and Motorola’s outer display is genuinely helpful for quick interactions. The software stays out of your way, and the phone feels relaxed in a way Samsung’s more structured approach doesn’t. It’s not quite as polished — every now and then an app won’t scale perfectly, or a layout will feel a bit tight — but most of the time it’s a pleasure to use.</p><p>Honor’s Magic V6 is a different story. The hardware is great, but the software often feels like it’s borrowing ideas from iOS, which can make everyday use feel a little unfamiliar if you’ve spent years inside Android’s usual rhythms. Some gestures behave differently than you expect, certain menus have that Apple‑style rounded translucency, and a few system animations lean more toward looking pretty than helping you get somewhere faster. None of this is inherently flawed — it’s just a different approach — but it can feel slightly awkward until you adjust.</p><p><strong>OVERALL WINNER:</strong> Samsung Galaxy Z Fold 8</p><p><strong>Runner-up:</strong> Motorola Razr Fold</p><p>Of the three, the Galaxy Z Fold 8 feels the most natural in everyday use. The Razr Fold is a strong second thanks to its great camera system and friendly, durable design, while the Magic V6 is powerful but feels better suited to fans of Apple’s software. If you want a foldable that behaves like a great phone first and a big screen second, Samsung is the one that gets it right.</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[ Does the Galaxy Z Fold 8 Ultra make the most use of its screen space? I streamed a bunch of movies and TV shows to find out ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When it comes to streaming movies and TV shows, a larger screen is usually considered the better option. But, that only really works if the screen shape actually conforms to the aspect ratio of the content in question. That's not an issue for most phones or tablet screens, but what about the larger, oddly-shaped foldable displays like the one on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Samsung Galaxy Z Fold 8 Ultra</a>?</p><p>I've been testing the Z Fold 8 Ultra for the past few weeks, and it shouldn't surprise anyone that watching video on the larger display means I also have to contend with large areas of blank space around the video. This can be rather irritating, especially in brighter environments that highlight both the display crease and my own reflection.</p><div class="product"><a data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098">Galaxy Z Fold 8 Ultra: $2098</a></strong><br>The price may have gone up (again), there are are still plenty of reasons to pick up the Z Fold 8 Ultra. There's a large 8-inch foldable display hiding away, alongside a 6.5-inch cover display, trio of main cameras (with a 200MP main lens), powerful performance and excellent battery life.</p><p>Amazon is currently giving away a $350 gift card with each purchase too.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098">View Deal</a></p></div><p>But as many people will no doubt point out, there are multiple ways to watch videos on the Galaxy Z Fold 8 Ultra. There's the cover display which, while narrower than most phones, offers a traditional viewing experience. The foldable display can also be oriented in portrait or landscape modes, and switching between the two flips the aspect ratio. </p><p>While this may not seem like a big deal, the Z Fold 8 Ultra isn't a perfect square, and that means the flip also changes how video content sits on your phone. But which mode is the better way to watch stuff? I tested the Z Fold 8 Ultra's three viewing experiences against the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> to find out.</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/oFT-YOrakEg" allowfullscreen></iframe></div></div><h2 id="how-i-tested-the-screens">How I tested the screens</h2><p>It's easy to load up some content on a screen and rely on vibes alone to make your conclusion, but I took things a step further by actively measuring everything on screen. This started with the screen itself, measuring between the bezels and calculating the amount of screen space that is actually available.</p><p>I should caveat at this point that this is only a rough calculation, because all four phones have curved corners. This is less of an issue on the Z Fold 8 Ultra because those curves are very slight. However the iPhone 17 Pro Max's corners are larger and more rounded, which means the total screen area is slightly smaller than the math suggests.</p><p>Once the total area of each display was calculated, I got to work streaming, throwing up a bunch of different kinds of content and measuring how much screen space they took up. Content included:</p><ul><li>"X-Men (2000)" (2:39:1) purchased on YouTube</li><li>"X-Men-97" (2:35:1)  on Disney Plus</li><li>"The Emperor's New Groove" (16:9) on Disney Plus</li><li>"Scrubs" (2001) (4:3) on Disney Plus</li><li>"Avengers: Endgame" (2:39:1) on Disney Plus</li><li>"Avengers: Endgame IMAX Enhanced Edition" (1:9:1) on Disney Plus</li><li>Various vertical videos on TikTok</li></ul><p>I set up each video playing on the four screen types, then measured how large each video was. With that in hand, I was able to work out just how much screen space they actually used, and thus, how much space is just sitting there going to waste. Crucially, this means I can figure out the best option for watching content in something close to a full-screen experience.</p><p>I should also note that while a lot of streaming platforms offer a "zoom to fill" option on smart phones and tablets, I have not taken this into account since that essentially crops the video and means you don't see everything that's going on.</p><h2 id="iphone-17-pro-max">iPhone 17 Pro Max</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3438px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bi6PrNpRHCmk6W6nbvqbne" name="Z Fold 8 ultra video size shots-9" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/bi6PrNpRHCmk6W6nbvqbne-1920-80.jpg" mos="" align="middle" fullscreen="" width="3438" height="1934" 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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen (Landscape)</strong></p></td><td  ><p><strong>2.83</strong></p></td><td  ><p><strong>6.22</strong></p></td><td  ><p><strong>17.60</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.13</p></td><td  ><p>5.12</p></td><td  ><p>10.91</p></td><td  ><p>61.95</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.12</p></td><td  ><p>13.72</p></td><td  ><p>77.95</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.83</p></td><td  ><p>4.76</p></td><td  ><p>13.47</p></td><td  ><p>76.53</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>2.83</p></td><td  ><p>3.82</p></td><td  ><p>10.81</p></td><td  ><p>61.41</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.13</p></td><td  ><p>5.12</p></td><td  ><p>10.91</p></td><td  ><p>61.95</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.12</p></td><td  ><p>13.72</p></td><td  ><p>77.95</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok (Portrait)</strong></p></td><td  ><p>5.70</p></td><td  ><p>2.83</p></td><td  ><p>16.13</p></td><td  ><p>91.64</p></td></tr></tbody></table></div><p>The iPhone 17 Pro Max has roughly 17.6 square inches of screen space available, but it seems as though a bunch of the tested content struggles to fill up that space by default. The most efficient use of the screen comes from TikTok, which takes up 92.94% of the screen. This shouldn't be a huge surprise given the platform's vertical video feed that can take up almost the full length of the screen.</p><p>When it comes to horizontal video, the content doesn't fare nearly as well. The worst offender was "Scrubs," though this shouldn't really be a surprise since the early seasons were broadcast in the (then standard) 4:3 aspect ratio. That box-like shape isn't great at filling up wider-screen devices, reflected by the fact it only filled 61.41% of the available space.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="szKHqwyLGQvcjHp8cPTawe" name="Z Fold 8 ultra video size shots-2" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/szKHqwyLGQvcjHp8cPTawe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Widescreen live action movies didn't do so well either. Both movies have been cropped vertically, and can't take full advantage of the landscape height, but they don't fail to take advantage of the iPhone's width and crop that way as well. In fact, all the movies suffered from this and left at least 1.1 inches of wasted space across both sides of the display. In the end, though, both movies wasted only slightly less space than "Scrubs" did, taking up 61.95% of the usable screen space</p><p>The IMAX edition of "Avengers: Endgame" fared a little better, with the IMAX scenes using up more of the vertical space that the standard aspect ratio. Because of this, the movie, along with the bizarrely proportioned "X-Men-97," used up 77.95% of the iPhone's available screen space. This was closely followed by the 16:9 "Emperor's New Groove," with 76.53%, a difference accounted for by a slightly shorter and narrower video.</p><h2 id="samsung-galaxy-z-fold-8-ultra-cover-display">Samsung Galaxy Z Fold 8 Ultra (Cover Display)</h2><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="S9uSv2YnCG5keeQwVsU4xe" name="Z Fold 8 ultra video size shots-3" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/S9uSv2YnCG5keeQwVsU4xe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen (Landscape)</strong></p></td><td  ><p><strong>2.56</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>15.21</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>1.77</p></td><td  ><p>4.57</p></td><td  ><p>8.09</p></td><td  ><p>53.19</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.94</p></td><td  ><p>15.21</p></td><td  ><p>100</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>4.25</p></td><td  ><p>10.88</p></td><td  ><p>71.55</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>3.43</p></td><td  ><p>8.78</p></td><td  ><p>57.74</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.94</p></td><td  ><p>15.21</p></td><td  ><p>100</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.20</p></td><td  ><p>13.31</p></td><td  ><p>87.54</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok (Portrait)</strong></p></td><td  ><p>4.57</p></td><td  ><p>2.56</p></td><td  ><p>11.70</p></td><td  ><p>76.94</p></td></tr></tbody></table></div><p>Looking at the results for the Z Fold 8 Ultra's cover display, and you'll see a couple of oddities. Both "X-Men 97" and the standard edition of "Avengers: Endgame" both took up 100% of the screen space. Which is certainly good, though this made me pause and wonder what's going on.</p><p>Checking the measurements of the cover display versus the iPhone 17 Pro Max, and I noticed that the video was actually smaller on the iPhone — despite the fact the 17 Pro Max has almost 2.5 extra square inches of available screen space.</p><p>Weirder still was the fact that my Google-purchased copy of "X-Men" was smaller than "Endgame," taking up a paltry 53.19% of the screen. They were both the same size on the iPhone, but the Z Fold 8 Ultra decided that the black bars must be preserved for this particular movie. This appears to be a YouTube issue, because X-Men on Disney Plus expanded to the full size of the display, just like Endgame did.</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:3121px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Jgg4hgUCgAxuobyisY5PTe" name="Z Fold 8 ultra video size shots-7" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/Jgg4hgUCgAxuobyisY5PTe-1920-80.jpg" mos="" align="middle" fullscreen="" width="3121" height="1756" 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 IMAX version of Endgame obviously came out a little worse, since the taller image requires more space than the 8 Ultra's cover display allows — causing black bars at either side of the screen. That said, it still used up 87.54% of the available screen.</p><p>16:9 content like "The Emperor's New Groove" fared a lot worse here, though, since the narrow screen forced the video to shrink at the edges even more than an IMAX movie. Likewise the design meant "Scrubs" left a load more wasted space thanks to its square-ish aspect ratio. Both videos used up a respective 71.55% and 57.74% of the available screen space.</p><p>As for TikTok, this result did surprise me. The vertical videos used up all the available width when playing, but they didn't take full advantage of the screen length. Which again, I assume is down to the 8 Ultra's narrow cover display, and means TikTok only used 76.94% of the available screen space.</p><h2 id="samsung-galaxy-z-fold-8-ultra-foldable-display-portrait">Samsung Galaxy Z Fold 8 Ultra Foldable Display (Portrait)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3583px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="VdSKDACwu3ujopw3WSWnse" name="Z Fold 8 ultra video size shots-10" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/VdSKDACwu3ujopw3WSWnse-1920-80.jpg" mos="" align="middle" fullscreen="" width="3583" height="2015" 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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>5.35</strong></p></td><td  ><p><strong>31.78</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.20</p></td><td  ><p>5.35</p></td><td  ><p>11.77</p></td><td  ><p>37.04</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.44</p></td><td  ><p>5.35</p></td><td  ><p>13.05</p></td><td  ><p>41.08</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.99</p></td><td  ><p>5.03</p></td><td  ><p>15.04</p></td><td  ><p>47.33</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>4.01</p></td><td  ><p>5.35</p></td><td  ><p>21.45</p></td><td  ><p>67.51</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.24</p></td><td  ><p>5.35</p></td><td  ><p>11.98</p></td><td  ><p>37.71</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.99</p></td><td  ><p>5.35</p></td><td  ><p>16.00</p></td><td  ><p>50.34</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok</strong></p></td><td  ><p>5.63</p></td><td  ><p>3.14</p></td><td  ><p>17.68</p></td><td  ><p>55.63</p></td></tr></tbody></table></div><p>The Z Fold 8 Ultra's larger display is the size of two cover displays side by side, which should mean a larger video to watch, right? Well, apparently not. At least not when the phone is in portrait mode. The size of the screen means there is a lot more wasted space, but the videos themselves aren't automatically bigger than they appear on the cover display either.</p><p>Both "X-Men-97" and the standard version of "Avengers: Endgame" ended up being smaller than their counterparts on the Ultra's cover display — in terms of height, width and overall area. Both used a respective 41.08% and 37.71% of the available screen space. </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:3915px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kti5xxYn8KnniYz2kdTNwe" name="Z Fold 8 ultra video size shots-6" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/kti5xxYn8KnniYz2kdTNwe-1920-80.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: Future)</span></figcaption></figure><p>That only worse performer was X-Men on YouTube, which used up 37.04% thanks to the way YouTube presents the video. That means almost two thirds of the screen is going unused. However, the video itself is larger than what I saw on the 8 Ultra's cover screen and the iPhone 17 Pro Max. So there is still a benefit to using the large screen. </p><p>There is an awful lot of wasted screen space watching in portrait mode. "The Emperor's New Groove" only used 47.33% of the screen, while the IMAX edition of "Endgame" took up just over half (50.34%). TikTok also suffered, using up 55.63% and showed off a video that was both shorter and wider than the one from the iPhone.</p><p>The major winner here is "Scrubs," thanks to the aspect ratio, which means it took up 67.51% of the screen and offered a much larger overall image than we've seen from it so far.</p><h2 id="samsung-galaxy-z-fold-8-ultra-foldable-display-landscape">Samsung Galaxy Z Fold 8 Ultra Foldable Display (Landscape)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3527px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MGCMuUBSp4HjqTYptkefge" name="Z Fold 8 ultra video size shots-5" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/MGCMuUBSp4HjqTYptkefge-1920-80.jpg" mos="" align="middle" fullscreen="" width="3527" height="1984" 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 key benefit to watching video in landscape mode is that the entirety of the display crease gets covered up by whatever you're watching, which makes it nearly impossible to see. The other main advantage to watching video this way is that the videos are larger (and less wasteful) than in portrait mode</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen</strong></p></td><td  ><p><strong>5.35</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>31.78</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.48</p></td><td  ><p>5.94</p></td><td  ><p>14.73</p></td><td  ><p>46.36</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.94</p></td><td  ><p>15.92</p></td><td  ><p>50.09</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>3.34</p></td><td  ><p>5.55</p></td><td  ><p>18.54</p></td><td  ><p>58.33</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>4.48</p></td><td  ><p>5.94</p></td><td  ><p>26.61</p></td><td  ><p>83.74</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.48</p></td><td  ><p>5.94</p></td><td  ><p>14.73</p></td><td  ><p>46.36</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>3.15</p></td><td  ><p>5.94</p></td><td  ><p>18.71</p></td><td  ><p>58.88</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok </strong></p></td><td  ><p>5.00</p></td><td  ><p>2.83</p></td><td  ><p>14.15</p></td><td  ><p>44.53</p></td></tr></tbody></table></div><p>The biggest winner is again, "Scrubs," or any other older TV show that was filmed with a 4:3 aspect ratio. The show took up 83.74% of the total screen space, over 16% more than it did in portrait mode. This obviously means that the video is noticeably larger, though the standard definition image does not look great if you're getting up close with the screen.</p><p>Most of the other videos take full advantage of the extra width, with the only exception being "The Emperor's New Groove," which is about 0.4-inches narrower. However the extra height afforded to  16:9 movie means it uses up 58.33% of the screen, compared to the 46.46% utilized by X-Men and the standard version of "Avengers: Endgame."</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:3604px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="X2djLcD7k7Z3wXX62M8fxe" name="Z Fold 8 ultra video size shots-8" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/X2djLcD7k7Z3wXX62M8fxe-1920-80.jpg" mos="" align="middle" fullscreen="" width="3604" height="2027" 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>"X-Men-97" is 0.2-inches taller in this configuration, meaning its total raises to 50.09%, while the IMAX enhanced edition of "Endgame" fills up 58.88% on account of its extra height.</p><p>The only real loser here is TikTok, which is shorter and narrower in landscape mode, and wastes an extra 11% of the screen compared to portrait mode. That also makes sense, since this orientation is wider than it is long, and that means the vertical videos get squashed down compared to viewing in portrait mode.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WnnvjW"></div>                            </div>                            <script src="https://kwizly.com/embed/WnnvjW.js" async></script><h2 id="verdict">Verdict</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="k8FeDxnevUPmLReuywiMxe" name="Z Fold 8 ultra video size shots-4" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/k8FeDxnevUPmLReuywiMxe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>With the exception of TikTok, landscape mode actually seems to have the largest overall video size of all four display configurations, barring one. The way "Avengers: Endgame" is presented on the cover display means it is slightly taller on the outer screen, by one tenth of an inch. </p><p>The cover display's aspect ratio means it seems to be uniquely suited to playing live action theatrical releases. Assuming the service you're using actually makes the most of the space, and doesn't do what YouTube did with my copy of X-Men and squashes the whole thing down for no reason.</p><p>As for TikTok, it's clear that the Z Fold 8 Ultra's foldable display is not as well-suited to vertical video as non-folding screens. Likewise, those of you that are bothered about black areas of screen around your video, you may want to avoid foldables for the time being. If you need a larger image to watch, you should probably invest in some kind of tablet. </p><p>But now the one question I have is this: How different would the results have been if I'd had a <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> to compare everything to? Samsung has positioned the passport-shaped device as the ideal device for streaming and media after all, but that face-off is going to have to wait.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/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><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra">I tested the Samsung Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra for 2 weeks — here’s the one I’d buy</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">I just tried the new Samsung DeX on the Galaxy Z Fold 8 — and it has one huge upgrade</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/does-the-galaxy-z-fold-8-ultra-make-the-most-use-of-its-screen-space-i-streamed-a-bunch-of-movies-and-tv-shows-to-find-out</link>
                                                                            <description>
                            <![CDATA[ The Samsung Galaxy Z fold 8 Ultra has a big screen, but it's also an odd shape — so how does that affect video streaming? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">JGSy6tUvmFMSt7C5U4Piqe</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wVDkztfBTjGtEfwDR2dfxe-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 09 Aug 2026 10:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[iPhones]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/wVDkztfBTjGtEfwDR2dfxe-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max]]></media:description>                                                            <media:text><![CDATA[samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max]]></media:text>
                                <media:title type="plain"><![CDATA[samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wVDkztfBTjGtEfwDR2dfxe-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When it comes to streaming movies and TV shows, a larger screen is usually considered the better option. But, that only really works if the screen shape actually conforms to the aspect ratio of the content in question. That's not an issue for most phones or tablet screens, but what about the larger, oddly-shaped foldable displays like the one on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Samsung Galaxy Z Fold 8 Ultra</a>?</p><p>I've been testing the Z Fold 8 Ultra for the past few weeks, and it shouldn't surprise anyone that watching video on the larger display means I also have to contend with large areas of blank space around the video. This can be rather irritating, especially in brighter environments that highlight both the display crease and my own reflection.</p><div class="product"><a data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098">Galaxy Z Fold 8 Ultra: $2098</a></strong><br>The price may have gone up (again), there are are still plenty of reasons to pick up the Z Fold 8 Ultra. There's a large 8-inch foldable display hiding away, alongside a 6.5-inch cover display, trio of main cameras (with a 200MP main lens), powerful performance and excellent battery life.</p><p>Amazon is currently giving away a $350 gift card with each purchase too.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098">View Deal</a></p></div><p>But as many people will no doubt point out, there are multiple ways to watch videos on the Galaxy Z Fold 8 Ultra. There's the cover display which, while narrower than most phones, offers a traditional viewing experience. The foldable display can also be oriented in portrait or landscape modes, and switching between the two flips the aspect ratio. </p><p>While this may not seem like a big deal, the Z Fold 8 Ultra isn't a perfect square, and that means the flip also changes how video content sits on your phone. But which mode is the better way to watch stuff? I tested the Z Fold 8 Ultra's three viewing experiences against the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> to find out.</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/oFT-YOrakEg" allowfullscreen></iframe></div></div><h2 id="how-i-tested-the-screens">How I tested the screens</h2><p>It's easy to load up some content on a screen and rely on vibes alone to make your conclusion, but I took things a step further by actively measuring everything on screen. This started with the screen itself, measuring between the bezels and calculating the amount of screen space that is actually available.</p><p>I should caveat at this point that this is only a rough calculation, because all four phones have curved corners. This is less of an issue on the Z Fold 8 Ultra because those curves are very slight. However the iPhone 17 Pro Max's corners are larger and more rounded, which means the total screen area is slightly smaller than the math suggests.</p><p>Once the total area of each display was calculated, I got to work streaming, throwing up a bunch of different kinds of content and measuring how much screen space they took up. Content included:</p><ul><li>"X-Men (2000)" (2:39:1) purchased on YouTube</li><li>"X-Men-97" (2:35:1)  on Disney Plus</li><li>"The Emperor's New Groove" (16:9) on Disney Plus</li><li>"Scrubs" (2001) (4:3) on Disney Plus</li><li>"Avengers: Endgame" (2:39:1) on Disney Plus</li><li>"Avengers: Endgame IMAX Enhanced Edition" (1:9:1) on Disney Plus</li><li>Various vertical videos on TikTok</li></ul><p>I set up each video playing on the four screen types, then measured how large each video was. With that in hand, I was able to work out just how much screen space they actually used, and thus, how much space is just sitting there going to waste. Crucially, this means I can figure out the best option for watching content in something close to a full-screen experience.</p><p>I should also note that while a lot of streaming platforms offer a "zoom to fill" option on smart phones and tablets, I have not taken this into account since that essentially crops the video and means you don't see everything that's going on.</p><h2 id="iphone-17-pro-max">iPhone 17 Pro Max</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3438px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bi6PrNpRHCmk6W6nbvqbne" name="Z Fold 8 ultra video size shots-9" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/bi6PrNpRHCmk6W6nbvqbne-1920-80.jpg" mos="" align="middle" fullscreen="" width="3438" height="1934" 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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen (Landscape)</strong></p></td><td  ><p><strong>2.83</strong></p></td><td  ><p><strong>6.22</strong></p></td><td  ><p><strong>17.60</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.13</p></td><td  ><p>5.12</p></td><td  ><p>10.91</p></td><td  ><p>61.95</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.12</p></td><td  ><p>13.72</p></td><td  ><p>77.95</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.83</p></td><td  ><p>4.76</p></td><td  ><p>13.47</p></td><td  ><p>76.53</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>2.83</p></td><td  ><p>3.82</p></td><td  ><p>10.81</p></td><td  ><p>61.41</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.13</p></td><td  ><p>5.12</p></td><td  ><p>10.91</p></td><td  ><p>61.95</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.12</p></td><td  ><p>13.72</p></td><td  ><p>77.95</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok (Portrait)</strong></p></td><td  ><p>5.70</p></td><td  ><p>2.83</p></td><td  ><p>16.13</p></td><td  ><p>91.64</p></td></tr></tbody></table></div><p>The iPhone 17 Pro Max has roughly 17.6 square inches of screen space available, but it seems as though a bunch of the tested content struggles to fill up that space by default. The most efficient use of the screen comes from TikTok, which takes up 92.94% of the screen. This shouldn't be a huge surprise given the platform's vertical video feed that can take up almost the full length of the screen.</p><p>When it comes to horizontal video, the content doesn't fare nearly as well. The worst offender was "Scrubs," though this shouldn't really be a surprise since the early seasons were broadcast in the (then standard) 4:3 aspect ratio. That box-like shape isn't great at filling up wider-screen devices, reflected by the fact it only filled 61.41% of the available space.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="szKHqwyLGQvcjHp8cPTawe" name="Z Fold 8 ultra video size shots-2" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/szKHqwyLGQvcjHp8cPTawe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Widescreen live action movies didn't do so well either. Both movies have been cropped vertically, and can't take full advantage of the landscape height, but they don't fail to take advantage of the iPhone's width and crop that way as well. In fact, all the movies suffered from this and left at least 1.1 inches of wasted space across both sides of the display. In the end, though, both movies wasted only slightly less space than "Scrubs" did, taking up 61.95% of the usable screen space</p><p>The IMAX edition of "Avengers: Endgame" fared a little better, with the IMAX scenes using up more of the vertical space that the standard aspect ratio. Because of this, the movie, along with the bizarrely proportioned "X-Men-97," used up 77.95% of the iPhone's available screen space. This was closely followed by the 16:9 "Emperor's New Groove," with 76.53%, a difference accounted for by a slightly shorter and narrower video.</p><h2 id="samsung-galaxy-z-fold-8-ultra-cover-display">Samsung Galaxy Z Fold 8 Ultra (Cover Display)</h2><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="S9uSv2YnCG5keeQwVsU4xe" name="Z Fold 8 ultra video size shots-3" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/S9uSv2YnCG5keeQwVsU4xe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen (Landscape)</strong></p></td><td  ><p><strong>2.56</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>15.21</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>1.77</p></td><td  ><p>4.57</p></td><td  ><p>8.09</p></td><td  ><p>53.19</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.94</p></td><td  ><p>15.21</p></td><td  ><p>100</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>4.25</p></td><td  ><p>10.88</p></td><td  ><p>71.55</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>3.43</p></td><td  ><p>8.78</p></td><td  ><p>57.74</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.94</p></td><td  ><p>15.21</p></td><td  ><p>100</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.20</p></td><td  ><p>13.31</p></td><td  ><p>87.54</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok (Portrait)</strong></p></td><td  ><p>4.57</p></td><td  ><p>2.56</p></td><td  ><p>11.70</p></td><td  ><p>76.94</p></td></tr></tbody></table></div><p>Looking at the results for the Z Fold 8 Ultra's cover display, and you'll see a couple of oddities. Both "X-Men 97" and the standard edition of "Avengers: Endgame" both took up 100% of the screen space. Which is certainly good, though this made me pause and wonder what's going on.</p><p>Checking the measurements of the cover display versus the iPhone 17 Pro Max, and I noticed that the video was actually smaller on the iPhone — despite the fact the 17 Pro Max has almost 2.5 extra square inches of available screen space.</p><p>Weirder still was the fact that my Google-purchased copy of "X-Men" was smaller than "Endgame," taking up a paltry 53.19% of the screen. They were both the same size on the iPhone, but the Z Fold 8 Ultra decided that the black bars must be preserved for this particular movie. This appears to be a YouTube issue, because X-Men on Disney Plus expanded to the full size of the display, just like Endgame did.</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:3121px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Jgg4hgUCgAxuobyisY5PTe" name="Z Fold 8 ultra video size shots-7" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/Jgg4hgUCgAxuobyisY5PTe-1920-80.jpg" mos="" align="middle" fullscreen="" width="3121" height="1756" 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 IMAX version of Endgame obviously came out a little worse, since the taller image requires more space than the 8 Ultra's cover display allows — causing black bars at either side of the screen. That said, it still used up 87.54% of the available screen.</p><p>16:9 content like "The Emperor's New Groove" fared a lot worse here, though, since the narrow screen forced the video to shrink at the edges even more than an IMAX movie. Likewise the design meant "Scrubs" left a load more wasted space thanks to its square-ish aspect ratio. Both videos used up a respective 71.55% and 57.74% of the available screen space.</p><p>As for TikTok, this result did surprise me. The vertical videos used up all the available width when playing, but they didn't take full advantage of the screen length. Which again, I assume is down to the 8 Ultra's narrow cover display, and means TikTok only used 76.94% of the available screen space.</p><h2 id="samsung-galaxy-z-fold-8-ultra-foldable-display-portrait">Samsung Galaxy Z Fold 8 Ultra Foldable Display (Portrait)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3583px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="VdSKDACwu3ujopw3WSWnse" name="Z Fold 8 ultra video size shots-10" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/VdSKDACwu3ujopw3WSWnse-1920-80.jpg" mos="" align="middle" fullscreen="" width="3583" height="2015" 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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>5.35</strong></p></td><td  ><p><strong>31.78</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.20</p></td><td  ><p>5.35</p></td><td  ><p>11.77</p></td><td  ><p>37.04</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.44</p></td><td  ><p>5.35</p></td><td  ><p>13.05</p></td><td  ><p>41.08</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.99</p></td><td  ><p>5.03</p></td><td  ><p>15.04</p></td><td  ><p>47.33</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>4.01</p></td><td  ><p>5.35</p></td><td  ><p>21.45</p></td><td  ><p>67.51</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.24</p></td><td  ><p>5.35</p></td><td  ><p>11.98</p></td><td  ><p>37.71</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.99</p></td><td  ><p>5.35</p></td><td  ><p>16.00</p></td><td  ><p>50.34</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok</strong></p></td><td  ><p>5.63</p></td><td  ><p>3.14</p></td><td  ><p>17.68</p></td><td  ><p>55.63</p></td></tr></tbody></table></div><p>The Z Fold 8 Ultra's larger display is the size of two cover displays side by side, which should mean a larger video to watch, right? Well, apparently not. At least not when the phone is in portrait mode. The size of the screen means there is a lot more wasted space, but the videos themselves aren't automatically bigger than they appear on the cover display either.</p><p>Both "X-Men-97" and the standard version of "Avengers: Endgame" ended up being smaller than their counterparts on the Ultra's cover display — in terms of height, width and overall area. Both used a respective 41.08% and 37.71% of the available screen space. </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:3915px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kti5xxYn8KnniYz2kdTNwe" name="Z Fold 8 ultra video size shots-6" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/kti5xxYn8KnniYz2kdTNwe-1920-80.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: Future)</span></figcaption></figure><p>That only worse performer was X-Men on YouTube, which used up 37.04% thanks to the way YouTube presents the video. That means almost two thirds of the screen is going unused. However, the video itself is larger than what I saw on the 8 Ultra's cover screen and the iPhone 17 Pro Max. So there is still a benefit to using the large screen. </p><p>There is an awful lot of wasted screen space watching in portrait mode. "The Emperor's New Groove" only used 47.33% of the screen, while the IMAX edition of "Endgame" took up just over half (50.34%). TikTok also suffered, using up 55.63% and showed off a video that was both shorter and wider than the one from the iPhone.</p><p>The major winner here is "Scrubs," thanks to the aspect ratio, which means it took up 67.51% of the screen and offered a much larger overall image than we've seen from it so far.</p><h2 id="samsung-galaxy-z-fold-8-ultra-foldable-display-landscape">Samsung Galaxy Z Fold 8 Ultra Foldable Display (Landscape)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3527px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MGCMuUBSp4HjqTYptkefge" name="Z Fold 8 ultra video size shots-5" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/MGCMuUBSp4HjqTYptkefge-1920-80.jpg" mos="" align="middle" fullscreen="" width="3527" height="1984" 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 key benefit to watching video in landscape mode is that the entirety of the display crease gets covered up by whatever you're watching, which makes it nearly impossible to see. The other main advantage to watching video this way is that the videos are larger (and less wasteful) than in portrait mode</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen</strong></p></td><td  ><p><strong>5.35</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>31.78</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.48</p></td><td  ><p>5.94</p></td><td  ><p>14.73</p></td><td  ><p>46.36</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.94</p></td><td  ><p>15.92</p></td><td  ><p>50.09</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>3.34</p></td><td  ><p>5.55</p></td><td  ><p>18.54</p></td><td  ><p>58.33</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>4.48</p></td><td  ><p>5.94</p></td><td  ><p>26.61</p></td><td  ><p>83.74</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.48</p></td><td  ><p>5.94</p></td><td  ><p>14.73</p></td><td  ><p>46.36</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>3.15</p></td><td  ><p>5.94</p></td><td  ><p>18.71</p></td><td  ><p>58.88</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok </strong></p></td><td  ><p>5.00</p></td><td  ><p>2.83</p></td><td  ><p>14.15</p></td><td  ><p>44.53</p></td></tr></tbody></table></div><p>The biggest winner is again, "Scrubs," or any other older TV show that was filmed with a 4:3 aspect ratio. The show took up 83.74% of the total screen space, over 16% more than it did in portrait mode. This obviously means that the video is noticeably larger, though the standard definition image does not look great if you're getting up close with the screen.</p><p>Most of the other videos take full advantage of the extra width, with the only exception being "The Emperor's New Groove," which is about 0.4-inches narrower. However the extra height afforded to  16:9 movie means it uses up 58.33% of the screen, compared to the 46.46% utilized by X-Men and the standard version of "Avengers: Endgame."</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:3604px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="X2djLcD7k7Z3wXX62M8fxe" name="Z Fold 8 ultra video size shots-8" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/X2djLcD7k7Z3wXX62M8fxe-1920-80.jpg" mos="" align="middle" fullscreen="" width="3604" height="2027" 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>"X-Men-97" is 0.2-inches taller in this configuration, meaning its total raises to 50.09%, while the IMAX enhanced edition of "Endgame" fills up 58.88% on account of its extra height.</p><p>The only real loser here is TikTok, which is shorter and narrower in landscape mode, and wastes an extra 11% of the screen compared to portrait mode. That also makes sense, since this orientation is wider than it is long, and that means the vertical videos get squashed down compared to viewing in portrait mode.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WnnvjW"></div>                            </div>                            <script src="https://kwizly.com/embed/WnnvjW.js" async></script><h2 id="verdict">Verdict</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="k8FeDxnevUPmLReuywiMxe" name="Z Fold 8 ultra video size shots-4" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/k8FeDxnevUPmLReuywiMxe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>With the exception of TikTok, landscape mode actually seems to have the largest overall video size of all four display configurations, barring one. The way "Avengers: Endgame" is presented on the cover display means it is slightly taller on the outer screen, by one tenth of an inch. </p><p>The cover display's aspect ratio means it seems to be uniquely suited to playing live action theatrical releases. Assuming the service you're using actually makes the most of the space, and doesn't do what YouTube did with my copy of X-Men and squashes the whole thing down for no reason.</p><p>As for TikTok, it's clear that the Z Fold 8 Ultra's foldable display is not as well-suited to vertical video as non-folding screens. Likewise, those of you that are bothered about black areas of screen around your video, you may want to avoid foldables for the time being. If you need a larger image to watch, you should probably invest in some kind of tablet. </p><p>But now the one question I have is this: How different would the results have been if I'd had a <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> to compare everything to? Samsung has positioned the passport-shaped device as the ideal device for streaming and media after all, but that face-off is going to have to wait.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/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><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra">I tested the Samsung Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra for 2 weeks — here’s the one I’d buy</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">I just tried the new Samsung DeX on the Galaxy Z Fold 8 — and it has one huge upgrade</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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: 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-1920-80.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[ How ‘Ultra’ are the Galaxy Z Fold 8 Ultra's cameras? I put them to the test against the Galaxy S26 Ultra ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Samsung’s been making its “Ultra” phones for years under the Galaxy S banner, but this year marks the first time the title is being used for a foldable phone. Needless to say, Samsung is trying to change the narrative with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a> — by slapping its premier "Ultra" badge on a foldable for the very first time.</p><p>On paper, it packs the flagship hardware specs that I know appeal to hardcore fans who’ve remained faithful to the Galaxy S line for years, including the same 200MP main sensor as the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>. But when you’re paying a massive premium for a phone that folds, the cameras can’t come up short against the traditional slab flagship.</p><p>There are valid reasons why Samsung’s primary flagship remains the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phone</a> around, armed with a quadruple camera setup that includes two telephoto lenses — whereas the Z Fold 8 Ultra comes with just a single telephoto lens with a shorter optical range. To see if Samsung’s newest foldable genuinely earns its name, I captured side-by-side photo sets with both the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra">Galaxy Z Fold 8 Ultra and the Galaxy S26 Ultra</a>. Here’s what I found.</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-camera-specifications"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Camera specifications</span></h2><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Galaxy S26 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Main Camera</strong></p></td><td  ><p>200MP (f/1.7)</p></td><td  ><p>200MP (f/1.4)</p></td></tr><tr><td class="firstcol " ><p><strong>Ultrawide Camera</strong></p></td><td  ><p>50MP (f/1.9)</p></td><td  ><p>50MP (f/1.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Telephoto Cameras</strong></p></td><td  ><p>• 10MP 3x telephoto (f/2.4)</p></td><td  ><p>• 10MP 3x telephoto (f/2.4)</p><p>• 50MP 5x telephoto (f/2.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Zoom Range</strong></p></td><td  ><p>Up to 30x Space Zoom</p></td><td  ><p>Up to 100x Space Zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Cameras</strong></p></td><td  ><p>10MP Cover Screen (f/2.2) + 10 MP Inner Display (f/2.2)</p></td><td  ><p>12MP (f2.2)</p></td></tr></tbody></table></div><p>What’s really fascinating when looking at the specs alone is that the cameras are not entirely identical. Despite both devices sharing a 200MP resolution for their main sensors and a 50MP (f/1.9) ultrawide camera, the Galaxy S26 Ultra technically holds an edge in optical range and low-light capabilities.</p><p>For starters, the S26 Ultra features a wider f/1.4 aperture compared to the Z Fold 8 Ultra’s f/1.7, allowing more light to enter the sensor — which should result in better low-light performance, less noise, and blur-free action shots.</p><p>Over in the telephoto department, the S26 Ultra also benefits from dual telephoto lenses, complete with a superior 50MP sensor featuring 5x optical zoom. In contrast, the newer Z Fold 8 Ultra relies on just a single 10MP telephoto camera with a shorter 3x optical zoom. These specs alone tell me there’s no way the Z Fold 8 Ultra is going to match the S26 Ultra in sheer telephoto performance.</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-200mp-high-resolution"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: 200MP high resolution</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/cvvbtvqXhuKNV5PsiYQDfF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8rSb7RZZHv5rRpcnryAM5d-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Future</small></figcaption></figure></figure><p>These first two shots illustrate the amount of detail captured when set to their maximum 200MP photo option. Not only do both produce massive file sizes, but the differences between them appear minimal at first glance. Looking at the full scene, it’s great that both phones balance the exposure evenly, though the S26 Ultra is slightly brighter in the shadows.</p><p>Zooming in, however, reveals that the Z Fold 8 Ultra retains sharper details and definition almost everywhere. From the base of the tree to the ornate floral arrangement hanging over the terrace in the background, I’d give this round to the Z Fold 8 Ultra.</p><p><strong>Winner:</strong> Galaxy Z Fold 8 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-colors"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Colors</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/BKQv5NjgvAqWQGAzbbDNsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Tbcsv6heCjtKjWPzdCbZsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Judging by color performance alone, both phones deliver vibrant shots of the flower arrangement inside Whole Foods.</p><p>While the S26 Ultra has a penchant for a warmer color temperature — evident in how the pink flowers take on a slightly orange tone — the Z Fold 8 Ultra’s shot isn’t too far off, albeit not quite as warm. Still, neither phone clearly outperforms the other when it comes to color rendering here.</p><p><strong>Winner:</strong> tie</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-ultrawide"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Ultrawide</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/bawxTFUiEstaXNAb2AR6hF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/rNrVsvsoJRZYHsByiKvHoV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Given that both phones share identical 50MP (f/1.9) ultrawide cameras, I’m not surprised that this wide shot of Bryant Park is almost too close to call. Both devices capture impressive sharpness across the frame with minimal distortion around the edges.</p><p>However, looking closely at the lighting dynamics, the Galaxy S26 Ultra handles exposure and shadows slightly better — a trend I previously noted in the 200MP test. Notice how the people seated in the foreground have better visibility and contrast on the S26 Ultra, whereas the Z Fold 8 Ultra pulls a bit more shadow detail at the expense of a somewhat flatter tone.</p><p>Once again, it's a narrow victory, but the S26 Ultra takes it thanks to its superior dynamic range.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-dynamic-range"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Dynamic Range</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/bDSoaB6YXxuXKoTqHU3TfF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/MmwGZtHYFfdU4SzBWyJnmV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>With the sun coming from behind, the background and sky are much brighter than the metal statue sitting in the shadow — a setup that clearly reveals how their dynamic range performances differ.</p><p>I’m initially drawn to the Galaxy Z Fold 8 Ultra’s punchier overall shot, which is largely due to how it boosts contrast. Doing so, however, comes at the expense of the highlights in the trees and the glass building in the background.</p><p>On the other hand, the Galaxy S26 Ultra exhibits superior dynamic range. It manages to tone down the harsh highlights on the metal statue while pulling up subtle details in the darker foliage and shadowed steps along the bottom left. Ultimately, the S26 Ultra achieves a more balanced, natural exposure without blowing out the brightest areas or over-darkening the shadows.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-portrait"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Portrait</span></h2><iframe allow="" height="395" 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=b187e00e-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>At first glance, I don’t notice a whole lot of difference in the way they approach portrait shots, as both apply just the right amount of bokeh to blur the background while preserving clean edge separation around my colleague, <a href="https://www.tomsguide.com/author/mark-spoonauer">Mark Spoonauer</a>.</p><p>The Galaxy Z Fold 8 Ultra produces a natural skin tone and plenty of fine detail across Mark’s face and shirt. However, closer inspection reveals that there are sharper details captured by the Galaxy S26 Ultra’s portrait shot. Most noticeably, the fabric of his shirt and the stitching around his pocket show superior definition.</p><p><strong>Winner:</strong> Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-selfie"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Selfie</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/e8xVg6WGnZz9BPZSEvcrni-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Front camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/2jRFCRn8ANYoQ8b5WJRcoi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The S26 Ultra has a slight advantage on paper for taking selfies thanks to its 12MP front camera. The Z Fold 8 Ultra features dual 10MP selfie shooters, but for this test, I’m specifically comparing the cover screen camera.</p><p>It’s a very close call, though, with neither phone clearly outperforming the other. I really like the amount of sharp detail both capture across Mark’s face, as well as the texture of his shirt. Meanwhile, both devices manage to lift the exposure nicely in the shaded areas in the background.</p><p><strong>Winner:</strong> tie</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-low-light"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Low light</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/3uREWtvkGoHw9vP6mPBsGF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/nvYuSJhn6iiHxBXuiJCEcV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>When shooting in dimly lit conditions, the main sensor aperture specs show their real-world impact. The Galaxy S26 Ultra’s wider f/1.4 aperture pulls in significantly more light than the Z Fold 8 Ultra’s f/1.7 lens, creating a slightly brighter scene overall.</p><p>Looking at the backyard patio shot, the Galaxy S26 Ultra does a much better job illuminating the white fence in the background, the lawn, and the texture of the patio pavers.</p><p>Don’t get me wrong, the Galaxy Z Fold 8 Ultra still produces an excellent low-light photo that brightens an otherwise dark scene, but those same background areas remain darker and cast heavier shadows around the base of the chairs and side table. Thanks to its wider aperture, the S26 Ultra also retains cleaner details across the patio furniture without introducing excessive noise.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-telephoto"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Telephoto</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/j6MuaLqukbwjyN32Z4TfZF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/CEqvfgE3Etv4t8D7jWbPiV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/fVsU3F4aDfFac9ZQGj9wMF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WUWwCqzw5XMCMJbtVZGhgV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dpLtDThSHF5E4Qfuxs8ZGF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xTwrPNttz9jRWzYW7cn5cV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Where I find the most substantial difference between them is in their telephoto performance. At shorter distances, they deliver nearly identical results, but the shots above of the ice cream truck show how the Galaxy S26 Ultra offers true Ultra-level performance.</p><p>Comparing them across 5x, 10x, and 30x zoom levels highlights the clear advantage of the Galaxy S26 Ultra’s setup. At 5x zoom, both phones capture solid shots of the ice cream truck menu, but the S26 Ultra renders crisper text across the menu labels with less digital noise.</p><p>The divide widens significantly at 10x: the S26 Ultra retains sharp edges, vibrant contrast, and legible text on the menu options. To capture the same framing, the Z Fold 8 Ultra relies on digital cropping from its single 10MP 3x telephoto lens, leaving the 10x image noticeably softer with smoother, watercolor-like textures.</p><iframe allow="" height="395" 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=3ddb19aa-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>Finally, at 30x zoom, the S26 Ultra’s superior optical hardware gives its image processing far better detail to work with. The text labels under each ice cream cone remain surprisingly readable, whereas the Z Fold 8 Ultra’s 30x crop produces blurred text and blob-like details.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-verdict"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: 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:3506px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="A6iyDHHwEjWBJKYW5FPrpW" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/A6iyDHHwEjWBJKYW5FPrpW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3506" height="1972" 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 Galaxy Z Fold 8 Ultra proves that foldable cameras are no longer scaled-down afterthoughts, I wouldn’t say it has completely earned the "Ultra" crown across the board. For a phone bearing Samsung’s most prestigious naming convention, it can’t afford to come up short in any category — yet it still does.</p><p>The Galaxy S26 Ultra remains the undisputed camera king of Samsung's lineup. Thanks to the wider f/1.4 aperture of its main camera and its dedicated 50MP 5x periscope lens, the S26 Ultra consistently pulls ahead in the areas that separate the good from the great: low-light environments, dynamic range handling, and long-range telephoto zoom. If you want the absolute best camera results, the S26 Ultra is still the phone to get.</p><p>However, if you want the versatility of a foldable, the Z Fold 8 Ultra gets dangerously close in several areas. Still, falling short in low-light and telephoto performance is a tough pill to swallow considering the staggering price tag attached to Samsung's newest foldable.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WQwPpX"></div>                            </div>                            <script src="https://kwizly.com/embed/WQwPpX.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/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/how-ultra-are-the-galaxy-z-fold-8-ultras-cameras-i-put-them-to-the-test-against-the-galaxy-s26-ultra</link>
                                                                            <description>
                            <![CDATA[ I put the Galaxy Z Fold 8 Ultra to the test against the Galaxy S26 Ultra to see if its camera performance is "Ultra" worthy. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">UbrWxZnit2QxzjJm7UmYiG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TnA5425ZLKYYYgLYV3DJDG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 08 Aug 2026 09:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung 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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/TnA5425ZLKYYYgLYV3DJDG-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra rear cameras]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra rear cameras]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra rear cameras]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TnA5425ZLKYYYgLYV3DJDG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung’s been making its “Ultra” phones for years under the Galaxy S banner, but this year marks the first time the title is being used for a foldable phone. Needless to say, Samsung is trying to change the narrative with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a> — by slapping its premier "Ultra" badge on a foldable for the very first time.</p><p>On paper, it packs the flagship hardware specs that I know appeal to hardcore fans who’ve remained faithful to the Galaxy S line for years, including the same 200MP main sensor as the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>. But when you’re paying a massive premium for a phone that folds, the cameras can’t come up short against the traditional slab flagship.</p><p>There are valid reasons why Samsung’s primary flagship remains the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phone</a> around, armed with a quadruple camera setup that includes two telephoto lenses — whereas the Z Fold 8 Ultra comes with just a single telephoto lens with a shorter optical range. To see if Samsung’s newest foldable genuinely earns its name, I captured side-by-side photo sets with both the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra">Galaxy Z Fold 8 Ultra and the Galaxy S26 Ultra</a>. Here’s what I found.</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-camera-specifications"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Camera specifications</span></h2><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Galaxy S26 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Main Camera</strong></p></td><td  ><p>200MP (f/1.7)</p></td><td  ><p>200MP (f/1.4)</p></td></tr><tr><td class="firstcol " ><p><strong>Ultrawide Camera</strong></p></td><td  ><p>50MP (f/1.9)</p></td><td  ><p>50MP (f/1.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Telephoto Cameras</strong></p></td><td  ><p>• 10MP 3x telephoto (f/2.4)</p></td><td  ><p>• 10MP 3x telephoto (f/2.4)</p><p>• 50MP 5x telephoto (f/2.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Zoom Range</strong></p></td><td  ><p>Up to 30x Space Zoom</p></td><td  ><p>Up to 100x Space Zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Cameras</strong></p></td><td  ><p>10MP Cover Screen (f/2.2) + 10 MP Inner Display (f/2.2)</p></td><td  ><p>12MP (f2.2)</p></td></tr></tbody></table></div><p>What’s really fascinating when looking at the specs alone is that the cameras are not entirely identical. Despite both devices sharing a 200MP resolution for their main sensors and a 50MP (f/1.9) ultrawide camera, the Galaxy S26 Ultra technically holds an edge in optical range and low-light capabilities.</p><p>For starters, the S26 Ultra features a wider f/1.4 aperture compared to the Z Fold 8 Ultra’s f/1.7, allowing more light to enter the sensor — which should result in better low-light performance, less noise, and blur-free action shots.</p><p>Over in the telephoto department, the S26 Ultra also benefits from dual telephoto lenses, complete with a superior 50MP sensor featuring 5x optical zoom. In contrast, the newer Z Fold 8 Ultra relies on just a single 10MP telephoto camera with a shorter 3x optical zoom. These specs alone tell me there’s no way the Z Fold 8 Ultra is going to match the S26 Ultra in sheer telephoto performance.</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-200mp-high-resolution"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: 200MP high resolution</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/cvvbtvqXhuKNV5PsiYQDfF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8rSb7RZZHv5rRpcnryAM5d-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Future</small></figcaption></figure></figure><p>These first two shots illustrate the amount of detail captured when set to their maximum 200MP photo option. Not only do both produce massive file sizes, but the differences between them appear minimal at first glance. Looking at the full scene, it’s great that both phones balance the exposure evenly, though the S26 Ultra is slightly brighter in the shadows.</p><p>Zooming in, however, reveals that the Z Fold 8 Ultra retains sharper details and definition almost everywhere. From the base of the tree to the ornate floral arrangement hanging over the terrace in the background, I’d give this round to the Z Fold 8 Ultra.</p><p><strong>Winner:</strong> Galaxy Z Fold 8 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-colors"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Colors</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/BKQv5NjgvAqWQGAzbbDNsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Tbcsv6heCjtKjWPzdCbZsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Judging by color performance alone, both phones deliver vibrant shots of the flower arrangement inside Whole Foods.</p><p>While the S26 Ultra has a penchant for a warmer color temperature — evident in how the pink flowers take on a slightly orange tone — the Z Fold 8 Ultra’s shot isn’t too far off, albeit not quite as warm. Still, neither phone clearly outperforms the other when it comes to color rendering here.</p><p><strong>Winner:</strong> tie</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-ultrawide"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Ultrawide</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/bawxTFUiEstaXNAb2AR6hF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/rNrVsvsoJRZYHsByiKvHoV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Given that both phones share identical 50MP (f/1.9) ultrawide cameras, I’m not surprised that this wide shot of Bryant Park is almost too close to call. Both devices capture impressive sharpness across the frame with minimal distortion around the edges.</p><p>However, looking closely at the lighting dynamics, the Galaxy S26 Ultra handles exposure and shadows slightly better — a trend I previously noted in the 200MP test. Notice how the people seated in the foreground have better visibility and contrast on the S26 Ultra, whereas the Z Fold 8 Ultra pulls a bit more shadow detail at the expense of a somewhat flatter tone.</p><p>Once again, it's a narrow victory, but the S26 Ultra takes it thanks to its superior dynamic range.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-dynamic-range"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Dynamic Range</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/bDSoaB6YXxuXKoTqHU3TfF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/MmwGZtHYFfdU4SzBWyJnmV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>With the sun coming from behind, the background and sky are much brighter than the metal statue sitting in the shadow — a setup that clearly reveals how their dynamic range performances differ.</p><p>I’m initially drawn to the Galaxy Z Fold 8 Ultra’s punchier overall shot, which is largely due to how it boosts contrast. Doing so, however, comes at the expense of the highlights in the trees and the glass building in the background.</p><p>On the other hand, the Galaxy S26 Ultra exhibits superior dynamic range. It manages to tone down the harsh highlights on the metal statue while pulling up subtle details in the darker foliage and shadowed steps along the bottom left. Ultimately, the S26 Ultra achieves a more balanced, natural exposure without blowing out the brightest areas or over-darkening the shadows.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-portrait"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Portrait</span></h2><iframe allow="" height="395" 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=b187e00e-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>At first glance, I don’t notice a whole lot of difference in the way they approach portrait shots, as both apply just the right amount of bokeh to blur the background while preserving clean edge separation around my colleague, <a href="https://www.tomsguide.com/author/mark-spoonauer">Mark Spoonauer</a>.</p><p>The Galaxy Z Fold 8 Ultra produces a natural skin tone and plenty of fine detail across Mark’s face and shirt. However, closer inspection reveals that there are sharper details captured by the Galaxy S26 Ultra’s portrait shot. Most noticeably, the fabric of his shirt and the stitching around his pocket show superior definition.</p><p><strong>Winner:</strong> Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-selfie"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Selfie</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/e8xVg6WGnZz9BPZSEvcrni-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Front camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/2jRFCRn8ANYoQ8b5WJRcoi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The S26 Ultra has a slight advantage on paper for taking selfies thanks to its 12MP front camera. The Z Fold 8 Ultra features dual 10MP selfie shooters, but for this test, I’m specifically comparing the cover screen camera.</p><p>It’s a very close call, though, with neither phone clearly outperforming the other. I really like the amount of sharp detail both capture across Mark’s face, as well as the texture of his shirt. Meanwhile, both devices manage to lift the exposure nicely in the shaded areas in the background.</p><p><strong>Winner:</strong> tie</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-low-light"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Low light</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/3uREWtvkGoHw9vP6mPBsGF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/nvYuSJhn6iiHxBXuiJCEcV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>When shooting in dimly lit conditions, the main sensor aperture specs show their real-world impact. The Galaxy S26 Ultra’s wider f/1.4 aperture pulls in significantly more light than the Z Fold 8 Ultra’s f/1.7 lens, creating a slightly brighter scene overall.</p><p>Looking at the backyard patio shot, the Galaxy S26 Ultra does a much better job illuminating the white fence in the background, the lawn, and the texture of the patio pavers.</p><p>Don’t get me wrong, the Galaxy Z Fold 8 Ultra still produces an excellent low-light photo that brightens an otherwise dark scene, but those same background areas remain darker and cast heavier shadows around the base of the chairs and side table. Thanks to its wider aperture, the S26 Ultra also retains cleaner details across the patio furniture without introducing excessive noise.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-telephoto"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Telephoto</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/j6MuaLqukbwjyN32Z4TfZF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/CEqvfgE3Etv4t8D7jWbPiV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/fVsU3F4aDfFac9ZQGj9wMF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WUWwCqzw5XMCMJbtVZGhgV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dpLtDThSHF5E4Qfuxs8ZGF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xTwrPNttz9jRWzYW7cn5cV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Where I find the most substantial difference between them is in their telephoto performance. At shorter distances, they deliver nearly identical results, but the shots above of the ice cream truck show how the Galaxy S26 Ultra offers true Ultra-level performance.</p><p>Comparing them across 5x, 10x, and 30x zoom levels highlights the clear advantage of the Galaxy S26 Ultra’s setup. At 5x zoom, both phones capture solid shots of the ice cream truck menu, but the S26 Ultra renders crisper text across the menu labels with less digital noise.</p><p>The divide widens significantly at 10x: the S26 Ultra retains sharp edges, vibrant contrast, and legible text on the menu options. To capture the same framing, the Z Fold 8 Ultra relies on digital cropping from its single 10MP 3x telephoto lens, leaving the 10x image noticeably softer with smoother, watercolor-like textures.</p><iframe allow="" height="395" 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=3ddb19aa-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>Finally, at 30x zoom, the S26 Ultra’s superior optical hardware gives its image processing far better detail to work with. The text labels under each ice cream cone remain surprisingly readable, whereas the Z Fold 8 Ultra’s 30x crop produces blurred text and blob-like details.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-verdict"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: 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:3506px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="A6iyDHHwEjWBJKYW5FPrpW" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/A6iyDHHwEjWBJKYW5FPrpW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3506" height="1972" 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 Galaxy Z Fold 8 Ultra proves that foldable cameras are no longer scaled-down afterthoughts, I wouldn’t say it has completely earned the "Ultra" crown across the board. For a phone bearing Samsung’s most prestigious naming convention, it can’t afford to come up short in any category — yet it still does.</p><p>The Galaxy S26 Ultra remains the undisputed camera king of Samsung's lineup. Thanks to the wider f/1.4 aperture of its main camera and its dedicated 50MP 5x periscope lens, the S26 Ultra consistently pulls ahead in the areas that separate the good from the great: low-light environments, dynamic range handling, and long-range telephoto zoom. If you want the absolute best camera results, the S26 Ultra is still the phone to get.</p><p>However, if you want the versatility of a foldable, the Z Fold 8 Ultra gets dangerously close in several areas. Still, falling short in low-light and telephoto performance is a tough pill to swallow considering the staggering price tag attached to Samsung's newest foldable.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WQwPpX"></div>                            </div>                            <script src="https://kwizly.com/embed/WQwPpX.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/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[ Is the Galaxy Z Fold 8's crease really that good? I compared it to the current reigning champ ]]></title>
                                                                                                <dc:content><![CDATA[ <p>While everybody has been talking about the new shape of 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</a>, and to be fair, it's been very pleasant to use, one of the most overlooked upgrades on Samsung's new book-style foldables is <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-doesnt-have-a-crease-free-display-but-its-the-closest-samsung-has-ever-got-to-one">the less noticeable crease</a>.</p><p>Samsung says it has significantly reduced the crease thanks to its new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium</a> display technology, which debuts on both the Galaxy Z Fold 8 and the <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">Galaxy Z Fold 8 Ultra</a>.</p><p>But is it actually enough to catch up with other foldable phones that already have less visible creases? Earlier this year, I <a href="https://www.tomsguide.com/phones/android-phones/i-have-been-testing-oppo-find-n6-crease-free-foldable-phone">came away impressed by the Oppo Find N6</a>, particularly because of how subtle its crease was. So, I compared the Galaxy Z Fold 8 against the Oppo Find N6 to see which one comes out on top.</p><div class="product"><a data-dimension112="b84ccd80-926d-11f1-8619-bd41a0cddc53" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1899" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Unlocked-Graphite/dp/B0H126B3KV/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Samsung has a brand new kind of foldable with the passport-shaped Galaxy Z Fold 8. This foldable comes with a 7.6-inch folding display, with 4:3 aspect ratio that's designed for viewing video content.. There's also a 5.5-inch cover display, strong performance and battery life, plus a pair of great cameras on the back.</p><p>Buy the Z Fold 8 from Amazon now and you'll get a $350 voucher thrown in as well.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Unlocked-Graphite/dp/B0H126B3KV/" target="_blank" rel="nofollow" data-dimension112="b84ccd80-926d-11f1-8619-bd41a0cddc53" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1899">View Deal</a></p></div><h2 id="can-samsung-match-oppo-s-zero-feel-crease">Can Samsung match Oppo's "Zero-Feel" crease? </h2><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="JTcFhBxyXam8DFnAzF5RK5" name="z-fold-8-vs-oppo-find-n6-crease-1" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/JTcFhBxyXam8DFnAzF5RK5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>When Oppo announced the Find N6 earlier this year, one of the biggest talking points was its "zero-feel" crease. The company claimed it had reduced the crease to the point where you could barely see or even feel it while using the phone. </p><p>Having gone hands-on with the device, I can confirm that claim wasn't just marketing hype. The crease really was impressively subtle. Naturally, that made me even more curious to see what Samsung had done with the Galaxy Z Fold 8.</p><p>To compare the two, I placed the Galaxy Z Fold 8 and the Oppo Find N6 side by side under the same lighting conditions. I looked at both phones with the displays turned on and off, viewed them from multiple angles, and repeatedly ran my finger across each crease to compare how they looked and, perhaps more importantly, how they felt. </p><p>Right away, it became obvious that the two companies have taken very different approaches. </p><p>Samsung says its new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium display technology</a> redesigns the folding display to reduce the crease. However, structurally, the Galaxy Z Fold 8 is still the same as previous generations, with a single, clearly defined crease running down the middle of the display. </p><p>It's much shallower than on previous Galaxy Fold devices, but it's still easy to spot under direct light. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xSi6UvtEUxGpjacaJfhQR5" name="z-fold-8-vs-oppo-find-n6-crease-3" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/xSi6UvtEUxGpjacaJfhQR5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>The Oppo Find N6, on the other hand, looks quite different. Rather than one defined crease, the center of the display appears more like a series of tiny ripples. Neither phone hides the crease completely, but the two companies have clearly taken different approaches. </p><p>To be honest, I don't think either phone has a huge visual advantage when the displays are turned off. How visible the crease is depends almost entirely on the lighting and the angle you're looking at the screen from.</p><p>Where I did notice a difference was in how the crease feels. Running my finger across the Galaxy Z Fold 8, I could still feel a fairly noticeable dip before reaching the other side of the display.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Mxpj35cmMMyeokyzLdF9e5" name="z-fold-8-vs-oppo-find-n6-crease-4" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/Mxpj35cmMMyeokyzLdF9e5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>The Oppo Find N6 feels different. Instead of one distinct crease, your finger glides across a series of much subtler ripples. The transition is smoother overall, and if you aren't deliberately looking for it, you barely notice the crease. </p><p>With the displays turned on, I really struggled to spot the crease on either phone. Whether I was gaming, browsing articles, or watching videos, it quickly faded into the background to the point where I barely noticed it. </p><p>Samsung's new <a href="https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing">anti-reflective coating</a> on the inner display also helps here by reducing reflections that would otherwise make the crease more obvious under bright lighting. </p><h2 id="winner">Winner</h2><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="rAiYxSBr6axP3qYqgWdJa5" name="z-fold-8-vs-oppo-find-n6-crease-5" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/rAiYxSBr6axP3qYqgWdJa5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>So if I had to pick a winner, I'd probably go with the Oppo Find N6. I'll be honest with you, no foldable that closes completely is ever going to have a perfectly invisible crease. That's simply the nature of the form factor, and anything that folds is going to crease.</p><p>The Find N6's crease feels just a little smoother under your finger, and overall, I'd give it a narrow win.</p><p>That said, I don't think that should stop anyone from buying the Galaxy Z Fold 8. Samsung has made a massive leap forward compared to previous Galaxy Fold devices. </p><p>The crease no longer feels like one of the phone's biggest compromises, and once the display is turned on, the new anti-reflective coating actually helps make it even less noticeable during everyday use.</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/best-galaxy-z-fold-8-deals-and-galaxy-z-fold-8-ultra-sales">Galaxy Z Fold 8 deals are here: how to save up $1,200 on Samsung's new foldables</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/the-tech-world-hyped-up-the-galaxy-z-fold-8s-crease-free-display-heres-a-reality-check-after-7-days">The tech world hyped up the Galaxy Z Fold 8's 'crease-free' display — here's a reality check after 7 days</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-fold-report-reveals-this-is-how-apple-is-killing-the-crease">iPhone Fold report reveals this is how Apple is killing the crease</a></li></ul><div data-widget-type="multimodelreview" data-model-name="Samsung Galaxy Z Fold 8,Samsung Galaxy Z Fold 8 Ultra"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/comparing-galaxy-z-fold-8-vs-oppo-find-n6-crease</link>
                                                                            <description>
                            <![CDATA[ Samsung's Galaxy Z Fold 8 takes on the Oppo Find N6's "zero-feel" crease ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nhotHzLoGEG6cb2hPnM3eR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7q4j44puYb7f4VMuqkAg75-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 08 Aug 2026 08:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung 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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/7q4j44puYb7f4VMuqkAg75-1280-80.jpg">
                                                            <media:credit><![CDATA[Sanuj Bhatia / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6]]></media:description>                                                            <media:text><![CDATA[Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6]]></media:text>
                                <media:title type="plain"><![CDATA[Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7q4j44puYb7f4VMuqkAg75-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>While everybody has been talking about the new shape of 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</a>, and to be fair, it's been very pleasant to use, one of the most overlooked upgrades on Samsung's new book-style foldables is <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-doesnt-have-a-crease-free-display-but-its-the-closest-samsung-has-ever-got-to-one">the less noticeable crease</a>.</p><p>Samsung says it has significantly reduced the crease thanks to its new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium</a> display technology, which debuts on both the Galaxy Z Fold 8 and the <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">Galaxy Z Fold 8 Ultra</a>.</p><p>But is it actually enough to catch up with other foldable phones that already have less visible creases? Earlier this year, I <a href="https://www.tomsguide.com/phones/android-phones/i-have-been-testing-oppo-find-n6-crease-free-foldable-phone">came away impressed by the Oppo Find N6</a>, particularly because of how subtle its crease was. So, I compared the Galaxy Z Fold 8 against the Oppo Find N6 to see which one comes out on top.</p><div class="product"><a data-dimension112="b84ccd80-926d-11f1-8619-bd41a0cddc53" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1899" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Unlocked-Graphite/dp/B0H126B3KV/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Samsung has a brand new kind of foldable with the passport-shaped Galaxy Z Fold 8. This foldable comes with a 7.6-inch folding display, with 4:3 aspect ratio that's designed for viewing video content.. There's also a 5.5-inch cover display, strong performance and battery life, plus a pair of great cameras on the back.</p><p>Buy the Z Fold 8 from Amazon now and you'll get a $350 voucher thrown in as well.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Unlocked-Graphite/dp/B0H126B3KV/" target="_blank" rel="nofollow" data-dimension112="b84ccd80-926d-11f1-8619-bd41a0cddc53" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1899">View Deal</a></p></div><h2 id="can-samsung-match-oppo-s-zero-feel-crease">Can Samsung match Oppo's "Zero-Feel" crease? </h2><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="JTcFhBxyXam8DFnAzF5RK5" name="z-fold-8-vs-oppo-find-n6-crease-1" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/JTcFhBxyXam8DFnAzF5RK5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>When Oppo announced the Find N6 earlier this year, one of the biggest talking points was its "zero-feel" crease. The company claimed it had reduced the crease to the point where you could barely see or even feel it while using the phone. </p><p>Having gone hands-on with the device, I can confirm that claim wasn't just marketing hype. The crease really was impressively subtle. Naturally, that made me even more curious to see what Samsung had done with the Galaxy Z Fold 8.</p><p>To compare the two, I placed the Galaxy Z Fold 8 and the Oppo Find N6 side by side under the same lighting conditions. I looked at both phones with the displays turned on and off, viewed them from multiple angles, and repeatedly ran my finger across each crease to compare how they looked and, perhaps more importantly, how they felt. </p><p>Right away, it became obvious that the two companies have taken very different approaches. </p><p>Samsung says its new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium display technology</a> redesigns the folding display to reduce the crease. However, structurally, the Galaxy Z Fold 8 is still the same as previous generations, with a single, clearly defined crease running down the middle of the display. </p><p>It's much shallower than on previous Galaxy Fold devices, but it's still easy to spot under direct light. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xSi6UvtEUxGpjacaJfhQR5" name="z-fold-8-vs-oppo-find-n6-crease-3" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/xSi6UvtEUxGpjacaJfhQR5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>The Oppo Find N6, on the other hand, looks quite different. Rather than one defined crease, the center of the display appears more like a series of tiny ripples. Neither phone hides the crease completely, but the two companies have clearly taken different approaches. </p><p>To be honest, I don't think either phone has a huge visual advantage when the displays are turned off. How visible the crease is depends almost entirely on the lighting and the angle you're looking at the screen from.</p><p>Where I did notice a difference was in how the crease feels. Running my finger across the Galaxy Z Fold 8, I could still feel a fairly noticeable dip before reaching the other side of the display.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Mxpj35cmMMyeokyzLdF9e5" name="z-fold-8-vs-oppo-find-n6-crease-4" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/Mxpj35cmMMyeokyzLdF9e5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>The Oppo Find N6 feels different. Instead of one distinct crease, your finger glides across a series of much subtler ripples. The transition is smoother overall, and if you aren't deliberately looking for it, you barely notice the crease. </p><p>With the displays turned on, I really struggled to spot the crease on either phone. Whether I was gaming, browsing articles, or watching videos, it quickly faded into the background to the point where I barely noticed it. </p><p>Samsung's new <a href="https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing">anti-reflective coating</a> on the inner display also helps here by reducing reflections that would otherwise make the crease more obvious under bright lighting. </p><h2 id="winner">Winner</h2><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="rAiYxSBr6axP3qYqgWdJa5" name="z-fold-8-vs-oppo-find-n6-crease-5" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/rAiYxSBr6axP3qYqgWdJa5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>So if I had to pick a winner, I'd probably go with the Oppo Find N6. I'll be honest with you, no foldable that closes completely is ever going to have a perfectly invisible crease. That's simply the nature of the form factor, and anything that folds is going to crease.</p><p>The Find N6's crease feels just a little smoother under your finger, and overall, I'd give it a narrow win.</p><p>That said, I don't think that should stop anyone from buying the Galaxy Z Fold 8. Samsung has made a massive leap forward compared to previous Galaxy Fold devices. </p><p>The crease no longer feels like one of the phone's biggest compromises, and once the display is turned on, the new anti-reflective coating actually helps make it even less noticeable during everyday use.</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/best-galaxy-z-fold-8-deals-and-galaxy-z-fold-8-ultra-sales">Galaxy Z Fold 8 deals are here: how to save up $1,200 on Samsung's new foldables</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/the-tech-world-hyped-up-the-galaxy-z-fold-8s-crease-free-display-heres-a-reality-check-after-7-days">The tech world hyped up the Galaxy Z Fold 8's 'crease-free' display — here's a reality check after 7 days</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-fold-report-reveals-this-is-how-apple-is-killing-the-crease">iPhone Fold report reveals this is how Apple is killing the crease</a></li></ul><div data-widget-type="multimodelreview" data-model-name="Samsung Galaxy Z Fold 8,Samsung Galaxy Z Fold 8 Ultra"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Fold 8 Ultra vs Galaxy Z Fold 7 — are this year's upgrades really worth it? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Samsung Galaxy Z Fold 8 Ultra</a> is a fantastic foldable, with a lot of great upgrades that (mostly) stands up to the Ultra moniker. But the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7 </a>was also a fantastic foldable when it was released last year, with our review declaring it to be the foldable phone we've been waiting for.</p><p>Obviously this leaves us with a few questions that need answering. The Z Fold 8 Ultra is the better phone, but is it still good enough to supplant the Z Fold 7 as the foldable you should buy? After all, the Z Fold 8 Ultra is more expensive, and the Z Fold 7 is likely to get some price cuts in the wake of the Ultra's launch.</p><p>So how does the Galaxy Z Fold 8 Ultra compare to the Galaxy Z Fold 7, and which of these foldables is right for you?</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-specs"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galazy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Samsung Galazy Z Fold 7</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $2,099</p></td><td  ><p>From $1,999</p></td></tr><tr><td class="firstcol " ><p><strong>Main Display</strong></p></td><td  ><p>8 inches AMOLED (2184 x 1968, 1-120Hz)</p></td><td  ><p>8 inches AMOLED (2184 x 1968, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover Display</strong></p></td><td  ><p>6.5 inches AMOLED (2520 x 1080, 1-120Hz)</p></td><td  ><p>6.5 inches AMOLED (2520 x 1080, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td><td  ><p>Snapdragon 8 Elite </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>10MP, 10MP</p></td><td  ><p>10MP, 10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Camera</strong></p></td><td  ><p>200MP wide, 50MP ultra-wide, 10MP telephoto (3x optical)</p></td><td  ><p>200MP wide, 12MP ultra-wide, 10MP telephoto ( 3x opticazoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>4,400 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired, 20W wireless</p></td><td  ><p>25W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>158.4 x 72.8 x 8.9 mm (6.24 x 2.87 x 0.35 inches) folded, 143.2 x 158.4 x 4.2 mm (5.64 x 6.24 x 0.16 inches) unfolded</p></td><td  ><p>158.4 x 72.8 x 8.9 mm (6.24 x 2.87 x 0.35 inches) folded, 143.2 x 158.4 x 4.2 mm (5.64 x 6.24 x 0.17 inches) unfolded</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>215 grams (7.5 ounces)</p></td><td  ><p>215 grams (7.5 ounces)</p></td></tr><tr><td class="firstcol " ><p><strong>IP Rating</strong></p></td><td  ><p>IP48</p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p>Colors</p></td><td  ><p>Violet shadow, Cream, Graphite, Violet Green (online exclusive)</p></td><td  ><p>Blue Shadow, Silver Shadow, Jet-black, Mint</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-price-availability"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: 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:3328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="T6UGidvhwk5Am5sBqHvBVS" name="Z Fold 8 Ultra vs Z Fold 7-8" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/T6UGidvhwk5Am5sBqHvBVS-1920-80.jpg" mos="" align="middle" fullscreen="" width="3328" height="1872" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 7 has been on sale since last July, with prices starting at $1,999 for a model with 12GB of RAM and 256GB of storage. 512GB is available for $2,199, while a 1TB model with 16GB of RAM can be purchased for $2,499. </p><p>Color options include Silver Shadow, Jet Black, Blue Shadow and the Samsung-exclusive Mint. This phone is also likely to be discounted in the wake of the Z 8 series launch, since it's already a year old.</p><p>The Samsung Galaxy Z Fold 8 Ultra goes on sale on August 7, with prices starting at $2,199 for a model with 12GB of RAM and 256GB storage. 512GB raises the price to $2,299, while 1TB with 16GB of RAM will set you back $2,699.</p><p>Color options include Violet Shadow, Cream, Graphite and the Samsung-exclusive Green Shadow.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-design-and-display"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Design and 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:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TWaz6ndtJJBBsfEpVDj2cS" name="Z Fold 8 Ultra vs Z Fold 7-2" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/TWaz6ndtJJBBsfEpVDj2cS-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Samsung didn't offer any bold redesigns with the Z Fold 8 Ultra, and the new foldable's shape and size is more or less identical to the Galaxy Z Fold 7. They're not quite the same, since Z Fold 7 cases don't appear to fit on the back of the 8 Ultra, but it's close enough that you'd need precise measuring tools to notice.</p><p>The biggest upgrade is that the Z Fold 8 Ultra features a new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium display</a>, which offers improved durability and significantly less creasing in the middle. <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-doesnt-have-a-crease-free-display-but-its-the-closest-samsung-has-ever-got-to-one">It's not quite crease-free</a>, but it is almost invisible compared to the Z Fold 7. </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:2417px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="xYL3dLrXaNVRNg92GfxqsR" name="Z Fold 8 Ultra vs Z Fold 7-4" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/xYL3dLrXaNVRNg92GfxqsR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2417" height="1360" 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 Fold 8 Ultra also has a much better screen when it comes to dealing with bright light. Both phones have the same high resolution screens and adaptive 1-120Hz refresh rates, but the Z Fold 7 isn't nearly as bright as the 8 Ultra. In fact, last year's foldable recorded a peak brightness of 2,245 nits, while the Z Fold 8 Ultra hit 2,687 nits. </p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mspoonyg/video/7666429528071294222" data-video-id="7666429528071294222" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@mspoonyg" href="https://www.tiktok.com/@mspoonyg">@mspoonyg</a>                            <p></p><a target="_blank" title="♬ Thank You for Sunshine - House Duduk Music" href="https://www.tiktok.com/music/Thank-You-for-Sunshine-7650727836295612417">♬ Thank You for Sunshine - House Duduk Music</a></section>                    </blockquote></div>                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing">anti-reflective coating on the newer foldable</a> also makes it a lot easier to use the Fold 8 Ultra in bright conditions, and it makes a shocking amount of difference in reducing glare. By which I mean you won't see your own silhouette staring back at you nearly as much.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-performance"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: 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:2891px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xqV8DFuJtvGXYn6VEmv86S" name="Z Fold 8 Ultra vs Z Fold 7-9" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/xqV8DFuJtvGXYn6VEmv86S-1920-80.jpg" mos="" align="middle" fullscreen="" width="2891" height="1626" 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 Galaxy Z Fold 8 Ultra is the first Galaxy foldable to feature the custom "for Galaxy" chipset, which means it shares the same <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 chipset</a> as the Galaxy S26 series. Older foldables utilized Snapdragon's standard flagship chip, so the Z Fold 7 arrived running the same Snapdragon 8 Elite as countless other non-Samsung phones.</p><p>While the off-the-shelf chip is no slouch, the upgrade to a For Galaxy chipset means that the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-benchmarked-the-results-are-in">Z Fold 8 Ultra gets to enjoy a performance boost</a> compared to its predecessor.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench (Single/Multicore)</strong></p></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p></td><td  ><p><strong>Geekbench AI</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>3,733/11,457</p></td><td  ><p>49.24/12,950</p></td><td  ><p>71715</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>3,052/9,735</p></td><td  ><p>41.21/10,812</p></td><td  ><p>61299</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>3,785 / 11,563</p></td><td  ><p>49.37 / 12,984</p></td><td  ><p>83047 (TensorFlow Lite QNN)</p></td></tr></tbody></table></div><p>As you can see in the table above, the Z Fold 8 Ultra finished Geekbench 6 with a single-core score of 3,733 and a multi-core score of 11,457. That's compared to the 3,052 and 9,735 scores recorded by the Z Fold 7 during the same benchmarking test. That's quite the jump, especially on the multi-core testing.</p><p>Graphics performance is a pretty similar story, with the Z Fold 8 Ultra scoring 12,950 in 3DMark's Solar Bay Unlimited benchmark test, with an average framerate of 49.24 fps. The Z Fold 7 came out with 10,912 and 41.21 fps which, while not terrible performance, seriously lags behind. Geekbench's AI test is more of the same with the Z Fold 8 Ultra coming in with a score of 71,715 to the Z Fold 7's 59,663.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-cameras"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: 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:3519px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="WcYimQVpPWYAFuWxKQJdES" name="Z Fold 8 Ultra vs Z Fold 7-6" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/WcYimQVpPWYAFuWxKQJdES-1920-80.jpg" mos="" align="middle" fullscreen="" width="3519" height="1979" 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 camera situation on the Galaxy Z Fold 8 Ultra is a little hit and miss, though the same is true of the Z Fold 7. Both phones share the same 200MP main camera lens, 10MP telephoto lens with 3x optical zoom and a pair of 10MP selfie cameras (one for each screen). </p><p>However, the 8 Ultra's ultrawide camera has been given a much-needed update, increasing the resolution to 50MP — among smaller changes. But saying the phones both have similar camera hardware doesn't really tell us how different the photos actually are — especially now that software plays such a huge part in the process.</p><iframe allow="" height="395" 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=2c06f5cc-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>You'd think that the quality of the 200MP main lens would be identical across both phones, but that actually isn't the case. They seem alike at first glance, but the Z Fold 8 Ultra is actually picking up a lot more detail compared to its predecessor. </p><p>The text on this mail box is a lot more legible, and the finer details in the brickwork stand out a lot more. Overall, the Fold 8 Ultra delivers a much clearer and crisper image.</p><iframe allow="" height="395" 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=17b020c6-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Despite the big bump in resolution, the difference in the ultrawide shots are pretty subtle — just as they were when I tested the cameras for the Galaxy Z Fold 8 Ultra review. The Z Fold 8 Ultra offers crisper image quality and a slightly brighter photo overall. At a glance, most won't be able to pick up the subtleties of how the two cameras are different.</p><iframe allow="" height="395" 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=40a85188-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Macro shots aren't that dissimilar either, and both phones are able to capture the smaller details from close-up shots. However, the Z Fold 7's shot is noticeably more washed out, and doesn't feature the same deeper coloring of the Z Fold 8 Ultra.</p><iframe allow="" height="395" 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=e8c3cc5e-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>The selfie camera quality is more or less identical on both phones. Some areas are clearer than others, depending on which side you're looking at, but that seems to be due to the variations on focus rather than the actual quality of the final shot. The Z Fold 8 Ultra is a little bit brighter, though.</p><iframe allow="" height="395" 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=cfc2f298-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Portrait mode is exactly the same, with the exact same focus variations and brightness difference as the regular selfie mode. Neither photo has any particular characteristics that make it superior to the other, and the bokeh effect looks exactly the same across both devices.</p><iframe allow="" height="395" 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=7fe0a734-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Speaking of identical, the same is true of the telephoto lens at 3x optical zoom. The quality of the shot on both phones is pretty poor, and it's an upgrade Samsung desperately needs to make ahead of the Z Fold 9 launch next year.</p><iframe allow="" height="395" 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=afe785b0-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Pushing the magnification up to 10x doesn't make any difference either. While the details are being picked up by the camera, the actual quality of the final shot is atrocious compared to other flagship phones that cost considerably less money — including Samsung's own Galaxy S26 Ultra.</p><iframe allow="" height="395" 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=00141e9a-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Samsung made a point of emphasizing how much it was improving low light capabilities with the Z Fold 8 Ultra, and it definitely looks like it's succeeded. Compared to the Z Fold 7, the night-time shots are brighter, crisper and pick up a lot more detail from the mail box. In fact, the Z Fold 7 shot blurs out the letters V and R around the crown at the top</p><p>Samsung has clearly made some improvements to the Galaxy Z Fold 8 Ultra, especially where low light photography is concerned. But a lot of the daytime upgrades seem to be a lot more subtle, and less noticeable to the casual observer. Whether that minor boost is worth it for you all depends on which phone you have, and whether the Z Fold 8 Ultra's other upgrades matter to you or not.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-battery-charging"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: 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:3531px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="imtV2afR8StvoQEVHJmnSS" name="Z Fold 8 Ultra vs Z Fold 7-10" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/imtV2afR8StvoQEVHJmnSS-1920-80.jpg" mos="" align="middle" fullscreen="" width="3531" height="1986" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the biggest upgrades on the Galaxy Z Fold 8 Ultra is the fact that the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">battery life is so much better now</a>. This is thanks to a higher capacity silicon carbon battery with 5,000 mAh capacity, compared to 4,400 mAh for the Fold 7. Our custom battery test, which involves web-surfing over a 5G connection until the power runs out, clocked the Z Fold 8 Ultra's battery life at 14 hours and 33 minutes.</p><p>While this isn't as good as the Galaxy S26 Ultra, it is almost four hours longer than the Galaxy Z Fold 7's 10 hours and 44 minutes of battery life. Under 11 hours is pretty disappointing, but hitting 14+ hours means the Z Fold 8 Ultra is far more likely to make it through a single day without recharging.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Hours : Minutes</strong></p></td><td  ><p><strong>Charging % in 30 minutes</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>14:33</p></td><td  ><p>76%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>10:44</p></td><td  ><p>54%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>16:10</p></td><td  ><p>77%</p></td></tr></tbody></table></div><p>The Z Fold 8 Ultra offers 45W wired charging compared to the Z Fold 7's 25W. That faster charging allows the phone to reclaim 76% of its battery life in just 30 minutes, compared to 54% on the Z Fold 7. Wireless charging has also increased by 5W, with up to 20W Qi2 speeds on the Z Fold 8 Ultra — though the embedded magnets are still missing from the phone.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-verdict"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3187px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ibSFwbJGnJU62HeZzyCu4S" name="Z Fold 8 Ultra vs Z Fold 7-LIST" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/ibSFwbJGnJU62HeZzyCu4S-1920-80.jpg" mos="" align="middle" fullscreen="" width="3187" height="1793" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 8 Ultra has a lot of upgrades compared to last year, and the majority of them are available in areas that actually matter to your everyday use of the phone. Battery life is significantly improved, performance has taken a pretty big jump and the bright, anti-reflective display makes it significantly nicer to use this phone in a variety of conditions. </p><p>Those are all notable quality of life improvements that could make the Z Fold 8 Ultra the foldable of choice for most people. The camera changes are subtle, with the biggest difference being low-light performance.</p><p>Overall. the Fold 7 is still a very good foldable, especially when you can find it for a sizable discount. But if you're in the market for a new foldable phone, the Fold 8 Ultra is hands-down the better option.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">I just tried the new Samsung DeX on the Galaxy Z Fold 8 — and it has one huge upgrade</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/3-big-ways-the-iphone-ultra-could-beat-the-galaxy-z-fold-8">iPhone Ultra vs Galaxy Z Fold 8 — here's 3 big ways Apple could win</a></li><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">I tested the Galaxy Z Fold 8 vs. Fold 8 Ultra to see if the lack of a telephoto zoom is a dealbreaker</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-z-fold-7-are-this-years-upgrades-really-worth-it</link>
                                                                            <description>
                            <![CDATA[ Is the Galaxy Z Fold 8 Ultra really a worthy upgrade over the Galaxy Z Fold 7? We put both phones to the test ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">iSrvHa6ZNdEiyKXRBpmYGJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/PQzuLPfoynftVZMYbb3hGS-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 08 Aug 2026 04:00:00 +0000</pubDate>                                                                                                                                                                                                                                <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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/PQzuLPfoynftVZMYbb3hGS-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[samsung galaxy z fold 7 and galaxy z fold 8 ultra]]></media:description>                                                            <media:text><![CDATA[samsung galaxy z fold 7 and galaxy z fold 8 ultra]]></media:text>
                                <media:title type="plain"><![CDATA[samsung galaxy z fold 7 and galaxy z fold 8 ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/PQzuLPfoynftVZMYbb3hGS-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Samsung Galaxy Z Fold 8 Ultra</a> is a fantastic foldable, with a lot of great upgrades that (mostly) stands up to the Ultra moniker. But the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7 </a>was also a fantastic foldable when it was released last year, with our review declaring it to be the foldable phone we've been waiting for.</p><p>Obviously this leaves us with a few questions that need answering. The Z Fold 8 Ultra is the better phone, but is it still good enough to supplant the Z Fold 7 as the foldable you should buy? After all, the Z Fold 8 Ultra is more expensive, and the Z Fold 7 is likely to get some price cuts in the wake of the Ultra's launch.</p><p>So how does the Galaxy Z Fold 8 Ultra compare to the Galaxy Z Fold 7, and which of these foldables is right for you?</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-specs"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galazy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Samsung Galazy Z Fold 7</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $2,099</p></td><td  ><p>From $1,999</p></td></tr><tr><td class="firstcol " ><p><strong>Main Display</strong></p></td><td  ><p>8 inches AMOLED (2184 x 1968, 1-120Hz)</p></td><td  ><p>8 inches AMOLED (2184 x 1968, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover Display</strong></p></td><td  ><p>6.5 inches AMOLED (2520 x 1080, 1-120Hz)</p></td><td  ><p>6.5 inches AMOLED (2520 x 1080, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td><td  ><p>Snapdragon 8 Elite </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>10MP, 10MP</p></td><td  ><p>10MP, 10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Camera</strong></p></td><td  ><p>200MP wide, 50MP ultra-wide, 10MP telephoto (3x optical)</p></td><td  ><p>200MP wide, 12MP ultra-wide, 10MP telephoto ( 3x opticazoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>4,400 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired, 20W wireless</p></td><td  ><p>25W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>158.4 x 72.8 x 8.9 mm (6.24 x 2.87 x 0.35 inches) folded, 143.2 x 158.4 x 4.2 mm (5.64 x 6.24 x 0.16 inches) unfolded</p></td><td  ><p>158.4 x 72.8 x 8.9 mm (6.24 x 2.87 x 0.35 inches) folded, 143.2 x 158.4 x 4.2 mm (5.64 x 6.24 x 0.17 inches) unfolded</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>215 grams (7.5 ounces)</p></td><td  ><p>215 grams (7.5 ounces)</p></td></tr><tr><td class="firstcol " ><p><strong>IP Rating</strong></p></td><td  ><p>IP48</p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p>Colors</p></td><td  ><p>Violet shadow, Cream, Graphite, Violet Green (online exclusive)</p></td><td  ><p>Blue Shadow, Silver Shadow, Jet-black, Mint</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-price-availability"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: 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:3328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="T6UGidvhwk5Am5sBqHvBVS" name="Z Fold 8 Ultra vs Z Fold 7-8" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/T6UGidvhwk5Am5sBqHvBVS-1920-80.jpg" mos="" align="middle" fullscreen="" width="3328" height="1872" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 7 has been on sale since last July, with prices starting at $1,999 for a model with 12GB of RAM and 256GB of storage. 512GB is available for $2,199, while a 1TB model with 16GB of RAM can be purchased for $2,499. </p><p>Color options include Silver Shadow, Jet Black, Blue Shadow and the Samsung-exclusive Mint. This phone is also likely to be discounted in the wake of the Z 8 series launch, since it's already a year old.</p><p>The Samsung Galaxy Z Fold 8 Ultra goes on sale on August 7, with prices starting at $2,199 for a model with 12GB of RAM and 256GB storage. 512GB raises the price to $2,299, while 1TB with 16GB of RAM will set you back $2,699.</p><p>Color options include Violet Shadow, Cream, Graphite and the Samsung-exclusive Green Shadow.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-design-and-display"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Design and 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:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TWaz6ndtJJBBsfEpVDj2cS" name="Z Fold 8 Ultra vs Z Fold 7-2" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/TWaz6ndtJJBBsfEpVDj2cS-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Samsung didn't offer any bold redesigns with the Z Fold 8 Ultra, and the new foldable's shape and size is more or less identical to the Galaxy Z Fold 7. They're not quite the same, since Z Fold 7 cases don't appear to fit on the back of the 8 Ultra, but it's close enough that you'd need precise measuring tools to notice.</p><p>The biggest upgrade is that the Z Fold 8 Ultra features a new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium display</a>, which offers improved durability and significantly less creasing in the middle. <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-doesnt-have-a-crease-free-display-but-its-the-closest-samsung-has-ever-got-to-one">It's not quite crease-free</a>, but it is almost invisible compared to the Z Fold 7. </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:2417px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="xYL3dLrXaNVRNg92GfxqsR" name="Z Fold 8 Ultra vs Z Fold 7-4" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/xYL3dLrXaNVRNg92GfxqsR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2417" height="1360" 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 Fold 8 Ultra also has a much better screen when it comes to dealing with bright light. Both phones have the same high resolution screens and adaptive 1-120Hz refresh rates, but the Z Fold 7 isn't nearly as bright as the 8 Ultra. In fact, last year's foldable recorded a peak brightness of 2,245 nits, while the Z Fold 8 Ultra hit 2,687 nits. </p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mspoonyg/video/7666429528071294222" data-video-id="7666429528071294222" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@mspoonyg" href="https://www.tiktok.com/@mspoonyg">@mspoonyg</a>                            <p></p><a target="_blank" title="♬ Thank You for Sunshine - House Duduk Music" href="https://www.tiktok.com/music/Thank-You-for-Sunshine-7650727836295612417">♬ Thank You for Sunshine - House Duduk Music</a></section>                    </blockquote></div>                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing">anti-reflective coating on the newer foldable</a> also makes it a lot easier to use the Fold 8 Ultra in bright conditions, and it makes a shocking amount of difference in reducing glare. By which I mean you won't see your own silhouette staring back at you nearly as much.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-performance"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: 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:2891px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xqV8DFuJtvGXYn6VEmv86S" name="Z Fold 8 Ultra vs Z Fold 7-9" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/xqV8DFuJtvGXYn6VEmv86S-1920-80.jpg" mos="" align="middle" fullscreen="" width="2891" height="1626" 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 Galaxy Z Fold 8 Ultra is the first Galaxy foldable to feature the custom "for Galaxy" chipset, which means it shares the same <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 chipset</a> as the Galaxy S26 series. Older foldables utilized Snapdragon's standard flagship chip, so the Z Fold 7 arrived running the same Snapdragon 8 Elite as countless other non-Samsung phones.</p><p>While the off-the-shelf chip is no slouch, the upgrade to a For Galaxy chipset means that the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-benchmarked-the-results-are-in">Z Fold 8 Ultra gets to enjoy a performance boost</a> compared to its predecessor.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench (Single/Multicore)</strong></p></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p></td><td  ><p><strong>Geekbench AI</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>3,733/11,457</p></td><td  ><p>49.24/12,950</p></td><td  ><p>71715</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>3,052/9,735</p></td><td  ><p>41.21/10,812</p></td><td  ><p>61299</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>3,785 / 11,563</p></td><td  ><p>49.37 / 12,984</p></td><td  ><p>83047 (TensorFlow Lite QNN)</p></td></tr></tbody></table></div><p>As you can see in the table above, the Z Fold 8 Ultra finished Geekbench 6 with a single-core score of 3,733 and a multi-core score of 11,457. That's compared to the 3,052 and 9,735 scores recorded by the Z Fold 7 during the same benchmarking test. That's quite the jump, especially on the multi-core testing.</p><p>Graphics performance is a pretty similar story, with the Z Fold 8 Ultra scoring 12,950 in 3DMark's Solar Bay Unlimited benchmark test, with an average framerate of 49.24 fps. The Z Fold 7 came out with 10,912 and 41.21 fps which, while not terrible performance, seriously lags behind. Geekbench's AI test is more of the same with the Z Fold 8 Ultra coming in with a score of 71,715 to the Z Fold 7's 59,663.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-cameras"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: 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:3519px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="WcYimQVpPWYAFuWxKQJdES" name="Z Fold 8 Ultra vs Z Fold 7-6" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/WcYimQVpPWYAFuWxKQJdES-1920-80.jpg" mos="" align="middle" fullscreen="" width="3519" height="1979" 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 camera situation on the Galaxy Z Fold 8 Ultra is a little hit and miss, though the same is true of the Z Fold 7. Both phones share the same 200MP main camera lens, 10MP telephoto lens with 3x optical zoom and a pair of 10MP selfie cameras (one for each screen). </p><p>However, the 8 Ultra's ultrawide camera has been given a much-needed update, increasing the resolution to 50MP — among smaller changes. But saying the phones both have similar camera hardware doesn't really tell us how different the photos actually are — especially now that software plays such a huge part in the process.</p><iframe allow="" height="395" 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=2c06f5cc-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>You'd think that the quality of the 200MP main lens would be identical across both phones, but that actually isn't the case. They seem alike at first glance, but the Z Fold 8 Ultra is actually picking up a lot more detail compared to its predecessor. </p><p>The text on this mail box is a lot more legible, and the finer details in the brickwork stand out a lot more. Overall, the Fold 8 Ultra delivers a much clearer and crisper image.</p><iframe allow="" height="395" 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=17b020c6-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Despite the big bump in resolution, the difference in the ultrawide shots are pretty subtle — just as they were when I tested the cameras for the Galaxy Z Fold 8 Ultra review. The Z Fold 8 Ultra offers crisper image quality and a slightly brighter photo overall. At a glance, most won't be able to pick up the subtleties of how the two cameras are different.</p><iframe allow="" height="395" 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=40a85188-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Macro shots aren't that dissimilar either, and both phones are able to capture the smaller details from close-up shots. However, the Z Fold 7's shot is noticeably more washed out, and doesn't feature the same deeper coloring of the Z Fold 8 Ultra.</p><iframe allow="" height="395" 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=e8c3cc5e-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>The selfie camera quality is more or less identical on both phones. Some areas are clearer than others, depending on which side you're looking at, but that seems to be due to the variations on focus rather than the actual quality of the final shot. The Z Fold 8 Ultra is a little bit brighter, though.</p><iframe allow="" height="395" 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=cfc2f298-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Portrait mode is exactly the same, with the exact same focus variations and brightness difference as the regular selfie mode. Neither photo has any particular characteristics that make it superior to the other, and the bokeh effect looks exactly the same across both devices.</p><iframe allow="" height="395" 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=7fe0a734-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Speaking of identical, the same is true of the telephoto lens at 3x optical zoom. The quality of the shot on both phones is pretty poor, and it's an upgrade Samsung desperately needs to make ahead of the Z Fold 9 launch next year.</p><iframe allow="" height="395" 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=afe785b0-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Pushing the magnification up to 10x doesn't make any difference either. While the details are being picked up by the camera, the actual quality of the final shot is atrocious compared to other flagship phones that cost considerably less money — including Samsung's own Galaxy S26 Ultra.</p><iframe allow="" height="395" 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=00141e9a-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Samsung made a point of emphasizing how much it was improving low light capabilities with the Z Fold 8 Ultra, and it definitely looks like it's succeeded. Compared to the Z Fold 7, the night-time shots are brighter, crisper and pick up a lot more detail from the mail box. In fact, the Z Fold 7 shot blurs out the letters V and R around the crown at the top</p><p>Samsung has clearly made some improvements to the Galaxy Z Fold 8 Ultra, especially where low light photography is concerned. But a lot of the daytime upgrades seem to be a lot more subtle, and less noticeable to the casual observer. Whether that minor boost is worth it for you all depends on which phone you have, and whether the Z Fold 8 Ultra's other upgrades matter to you or not.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-battery-charging"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: 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:3531px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="imtV2afR8StvoQEVHJmnSS" name="Z Fold 8 Ultra vs Z Fold 7-10" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/imtV2afR8StvoQEVHJmnSS-1920-80.jpg" mos="" align="middle" fullscreen="" width="3531" height="1986" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the biggest upgrades on the Galaxy Z Fold 8 Ultra is the fact that the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">battery life is so much better now</a>. This is thanks to a higher capacity silicon carbon battery with 5,000 mAh capacity, compared to 4,400 mAh for the Fold 7. Our custom battery test, which involves web-surfing over a 5G connection until the power runs out, clocked the Z Fold 8 Ultra's battery life at 14 hours and 33 minutes.</p><p>While this isn't as good as the Galaxy S26 Ultra, it is almost four hours longer than the Galaxy Z Fold 7's 10 hours and 44 minutes of battery life. Under 11 hours is pretty disappointing, but hitting 14+ hours means the Z Fold 8 Ultra is far more likely to make it through a single day without recharging.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Hours : Minutes</strong></p></td><td  ><p><strong>Charging % in 30 minutes</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>14:33</p></td><td  ><p>76%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>10:44</p></td><td  ><p>54%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>16:10</p></td><td  ><p>77%</p></td></tr></tbody></table></div><p>The Z Fold 8 Ultra offers 45W wired charging compared to the Z Fold 7's 25W. That faster charging allows the phone to reclaim 76% of its battery life in just 30 minutes, compared to 54% on the Z Fold 7. Wireless charging has also increased by 5W, with up to 20W Qi2 speeds on the Z Fold 8 Ultra — though the embedded magnets are still missing from the phone.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-verdict"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3187px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ibSFwbJGnJU62HeZzyCu4S" name="Z Fold 8 Ultra vs Z Fold 7-LIST" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/ibSFwbJGnJU62HeZzyCu4S-1920-80.jpg" mos="" align="middle" fullscreen="" width="3187" height="1793" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 8 Ultra has a lot of upgrades compared to last year, and the majority of them are available in areas that actually matter to your everyday use of the phone. Battery life is significantly improved, performance has taken a pretty big jump and the bright, anti-reflective display makes it significantly nicer to use this phone in a variety of conditions. </p><p>Those are all notable quality of life improvements that could make the Z Fold 8 Ultra the foldable of choice for most people. The camera changes are subtle, with the biggest difference being low-light performance.</p><p>Overall. the Fold 7 is still a very good foldable, especially when you can find it for a sizable discount. But if you're in the market for a new foldable phone, the Fold 8 Ultra is hands-down the better option.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">I just tried the new Samsung DeX on the Galaxy Z Fold 8 — and it has one huge upgrade</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/3-big-ways-the-iphone-ultra-could-beat-the-galaxy-z-fold-8">iPhone Ultra vs Galaxy Z Fold 8 — here's 3 big ways Apple could win</a></li><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">I tested the Galaxy Z Fold 8 vs. Fold 8 Ultra to see if the lack of a telephoto zoom is a dealbreaker</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Galaxy Z Fold 8 deals are here: how to save up $1,200 on Samsung's new foldables ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra are officially available for purchase. Samsung's new phones are among the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> we've tested, but they're also some one of the priciest. The Galaxy Z Fold 8 starts at $1,899, whereas the Galaxy Z Fold 8 Ultra starts at $2,099.</p><p>The good news is that there are plenty of Galaxy Z Fold 8 deals you can get right now on both phones. For example, you can get <a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">up to $1,900 off either phone at T-Mobile</a> with trade-in and an eligible data plan. Alternatively, you can get <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow">up to $1,200 off the Galaxy Z Fold 8 Ultra at Samsung</a> with trade-in. Or you'll get the same <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow">$200 Samsung credit</a> without a trade. </p><p>Below I've rounded up all of the best Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra deals you can get. (For more ways to save, check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> hub).</p><h3 class="article-body__section" id="section-quick-links-galaxy-z-fold-8"><span>Quick Links: Galaxy Z Fold 8</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free w/ trade-in + unlimited</strong></a><strong></strong></li><li><strong>Samsung: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in or $200 credit</strong></a></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow"><strong>free w/ trade-in + unlimited</strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow"><strong>free w/ trade-in or free watch + tablet</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade-in + unlimited</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in + $200 gift card</strong></a><strong></strong></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow"><strong>$1,899 + $350 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-quick-links-galaxy-z-fold-8-ultra"><span>Quick Links: Galaxy Z Fold 8 Ultra</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>up to $1,900 w/ trade-in + unlimited</strong></a><strong></strong></li><li><strong>Samsung: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in or $200 credit</strong></a></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow"><strong>$5/month w/ trade-in + unlimited</strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in or free watch + tablet</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8-ultra" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade-in + unlimited</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in + $200 gift card</strong></a><strong></strong></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow"><strong>$1,899 + $350 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-galaxy-z-fold-8-deals"><span>Galaxy Z Fold 8 deals</span></h3><div class="product"><a data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/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:600px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="4gDqoyT3A5J9nTa6Axevfg" name="TMobileLogo_1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4gDqoyT3A5J9nTa6Axevfg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ trade-in + unlimited @ T-Mobile</strong></a><br>New and existing T-Mobile customers can get the Galaxy Z Fold 8 for free with trade-in and Experience Beyond data plans. Or you'll get up to $1,100 off with trade-in and on Experience More plans. Other discounts are also available for other plans. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1312px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="YFnsbuxZypxrkdepxUH3h9" name="Samsung logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YFnsbuxZypxrkdepxUH3h9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1312" height="734" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br>Samsung is knocking up to $1,200 off Galaxy Z Fold 8 when you trade-in an older phone. Alternatively, you'll get a $200 credit if you don't have a trade-in. The phone features an 7.6-inch AMOLED (1848 x 2448) 120Hz main display, 5.5-inch AMOLED (1248 x 1972) 120Hz cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. On the rear you get a 50MP main wide-angle lens and 50MP ultra-wide lens. Selfie cams include a 10MP main display and 10MP cover camera. In our <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Galaxy Z Fold 8 hands-on</a>, we called it our favorite foldable to date. It loses the telephoto zoom, but you get a greatly reduced crease, brighter main screen, and lighter design.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.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-1920-80.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow" data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension25=""><strong>free w/ trade-in + unlimited @ AT&T</strong></a><br>New and existing customers can get the Galaxy Z Fold 8 for free when you trade in a phone with an eligible data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow" data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" 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-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25=""><strong>up to $1,200 off + free $200 GC @ Best Buy</strong></a><br>Best Buy is offering one of the best Galaxy Z Fold 8 deals around. Purchase your phone at Best Buy with trade-in and you'll get up to $1,200 off. Plus, you'll get a free $200 Best Buy gift card. <a class="view-deal button" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25=""><strong>up to $1,200 off w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is taking up to $1,200 off your Galaxy Z Fold 8 purchase with trade-in and eligible unlimited data plans. Or buy a Galaxy Fold 8 and get a free Galaxy Watch 9 and Galaxy Tab 10 FE 5G when you open a new line for each device. <a class="view-deal button" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" 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="NCwubcuyQYEeAmGJjMxYde" name="xfinitymobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NCwubcuyQYEeAmGJjMxYde-1920-80.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>up to $1,000 off w/ trade-in @ Xfinity Mobile</strong></a><br>Xfinity Mobile is offering up to $1,000 off the Galaxy Z Fold 8 (via trade-in). Customers who don't have a phone to trade can still get $600 off. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Samsung Galaxy Z Fold 8: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension25=""><strong>for $1,899 @ Amazon</strong></a><br>Amazon is offering a free $350 Amazon gift card when you buy your Galaxy Z Fold 8 at Amazon. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-preorder-deals"><span>Galaxy Z Fold 8 Ultra preorder deals</span></h3><div class="product"><a data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/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:600px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="4gDqoyT3A5J9nTa6Axevfg" name="TMobileLogo_1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4gDqoyT3A5J9nTa6Axevfg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>up to $1,900 off w/ trade-in + unlimited @ T-Mobile</strong></a><br>New and existing T-Mobile customers can get up to $1,900 off the Galaxy Z Fold 8 Ultra with trade-in and Experience Beyond data plans. Or you'll get up to $1,100 off with trade-in and on Experience More plans. Other discounts are also available for other plans. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1312px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="YFnsbuxZypxrkdepxUH3h9" name="Samsung logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YFnsbuxZypxrkdepxUH3h9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1312" height="734" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br>Samsung is knocking up to $1,200 off Galaxy Z Fold 8 Ultra purchases when you trade-in an older phone. Alternatively, you'll get a $200 credit if you don't have a trade-in. The phone features an 8-inch AMOLED (2504 x 2256) 120Hz main display, 6.5-inch AMOLED (1080 x 2520) 120Hz cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. On the rear you get a 200MP main wide-angle lens, 50MP ultra-wide lens, and 10MP telephoto lens (3x optical). Selfie cams include a 10MP main display and 10MP cover camera. In our <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a meaningful upgrade.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" 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-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25=""><strong>up to $1,200 off + free $200 GC @ Best Buy</strong></a><br>Best Buy is offering one of the best Galaxy Z Fold 8 Ultra deals around. Buy your phone at Best Buy with trade-in and you'll get up to $1,200 off. Plus, you'll get a free $200 Best Buy gift card just for your purchase. <a class="view-deal button" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.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-1920-80.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow" data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension25=""><strong>$5/month w/ trade-in + unlimited @ AT&T</strong></a><br>New and existing customers can get the Galaxy Z Fold 8 Ultra for $5.56/month when you trade in a phone with an eligible data plan. That's up to $1,900 off the phone's full price. <a class="view-deal button" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow" data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25=""><strong>up to $1,200 off w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is taking up to $1,200 off your Galaxy Z Fold 8 Ultra  with trade-in and eligible unlimited data plans. Or buy a Galaxy Fold 8 Ultra and get a free Galaxy Watch 9 and Galaxy Tab 10 FE 5G when you open a new line for each device. <a class="view-deal button" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449b24-8f79-11f1-a28e-f1483432e178" data-action="Deal Block" data-label="Z Fold 8 Ultra" data-dimension48="Z Fold 8 Ultra" data-dimension25="$2099" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a free $350 Amazon gift card when you buy your Galaxy Z Fold 8 Ultra at Amazon. It's one of the most generous deals we've seen on the unlocked version of Samsung's foldable. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow" data-dimension112="41449b24-8f79-11f1-a28e-f1483432e178" data-action="Deal Block" data-label="Z Fold 8 Ultra" data-dimension48="Z Fold 8 Ultra" data-dimension25="$2099">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&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/samsung-phones/best-galaxy-z-fold-8-deals-and-galaxy-z-fold-8-ultra-sales</link>
                                                                            <description>
                            <![CDATA[ Samsung Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra deals are officially here. I've rounded up the best discounts, trade-in offers, and freebies at retailers and carriers alike. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">TrUAVRfePg8tVbzzGwL3dD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/kGBrQMgLzjcqtKeGQ6v4dS-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 07 Aug 2026 12:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung 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-320-70.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/kGBrQMgLzjcqtKeGQ6v4dS-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 playing Spider-Man: Brand New Day Trailer with deal tag]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 playing Spider-Man: Brand New Day Trailer with deal tag]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 playing Spider-Man: Brand New Day Trailer with deal tag]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/kGBrQMgLzjcqtKeGQ6v4dS-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra are officially available for purchase. Samsung's new phones are among the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> we've tested, but they're also some one of the priciest. The Galaxy Z Fold 8 starts at $1,899, whereas the Galaxy Z Fold 8 Ultra starts at $2,099.</p><p>The good news is that there are plenty of Galaxy Z Fold 8 deals you can get right now on both phones. For example, you can get <a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">up to $1,900 off either phone at T-Mobile</a> with trade-in and an eligible data plan. Alternatively, you can get <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow">up to $1,200 off the Galaxy Z Fold 8 Ultra at Samsung</a> with trade-in. Or you'll get the same <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow">$200 Samsung credit</a> without a trade. </p><p>Below I've rounded up all of the best Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra deals you can get. (For more ways to save, check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> hub).</p><h3 class="article-body__section" id="section-quick-links-galaxy-z-fold-8"><span>Quick Links: Galaxy Z Fold 8</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free w/ trade-in + unlimited</strong></a><strong></strong></li><li><strong>Samsung: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in or $200 credit</strong></a></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow"><strong>free w/ trade-in + unlimited</strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow"><strong>free w/ trade-in or free watch + tablet</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade-in + unlimited</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in + $200 gift card</strong></a><strong></strong></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow"><strong>$1,899 + $350 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-quick-links-galaxy-z-fold-8-ultra"><span>Quick Links: Galaxy Z Fold 8 Ultra</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>up to $1,900 w/ trade-in + unlimited</strong></a><strong></strong></li><li><strong>Samsung: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in or $200 credit</strong></a></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow"><strong>$5/month w/ trade-in + unlimited</strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in or free watch + tablet</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8-ultra" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade-in + unlimited</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in + $200 gift card</strong></a><strong></strong></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow"><strong>$1,899 + $350 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-galaxy-z-fold-8-deals"><span>Galaxy Z Fold 8 deals</span></h3><div class="product"><a data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/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:600px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="4gDqoyT3A5J9nTa6Axevfg" name="TMobileLogo_1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4gDqoyT3A5J9nTa6Axevfg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ trade-in + unlimited @ T-Mobile</strong></a><br>New and existing T-Mobile customers can get the Galaxy Z Fold 8 for free with trade-in and Experience Beyond data plans. Or you'll get up to $1,100 off with trade-in and on Experience More plans. Other discounts are also available for other plans. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1312px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="YFnsbuxZypxrkdepxUH3h9" name="Samsung logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YFnsbuxZypxrkdepxUH3h9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1312" height="734" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br>Samsung is knocking up to $1,200 off Galaxy Z Fold 8 when you trade-in an older phone. Alternatively, you'll get a $200 credit if you don't have a trade-in. The phone features an 7.6-inch AMOLED (1848 x 2448) 120Hz main display, 5.5-inch AMOLED (1248 x 1972) 120Hz cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. On the rear you get a 50MP main wide-angle lens and 50MP ultra-wide lens. Selfie cams include a 10MP main display and 10MP cover camera. In our <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Galaxy Z Fold 8 hands-on</a>, we called it our favorite foldable to date. It loses the telephoto zoom, but you get a greatly reduced crease, brighter main screen, and lighter design.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.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-1920-80.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow" data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension25=""><strong>free w/ trade-in + unlimited @ AT&T</strong></a><br>New and existing customers can get the Galaxy Z Fold 8 for free when you trade in a phone with an eligible data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow" data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" 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-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25=""><strong>up to $1,200 off + free $200 GC @ Best Buy</strong></a><br>Best Buy is offering one of the best Galaxy Z Fold 8 deals around. Purchase your phone at Best Buy with trade-in and you'll get up to $1,200 off. Plus, you'll get a free $200 Best Buy gift card. <a class="view-deal button" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25=""><strong>up to $1,200 off w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is taking up to $1,200 off your Galaxy Z Fold 8 purchase with trade-in and eligible unlimited data plans. Or buy a Galaxy Fold 8 and get a free Galaxy Watch 9 and Galaxy Tab 10 FE 5G when you open a new line for each device. <a class="view-deal button" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" 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="NCwubcuyQYEeAmGJjMxYde" name="xfinitymobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NCwubcuyQYEeAmGJjMxYde-1920-80.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>up to $1,000 off w/ trade-in @ Xfinity Mobile</strong></a><br>Xfinity Mobile is offering up to $1,000 off the Galaxy Z Fold 8 (via trade-in). Customers who don't have a phone to trade can still get $600 off. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Samsung Galaxy Z Fold 8: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension25=""><strong>for $1,899 @ Amazon</strong></a><br>Amazon is offering a free $350 Amazon gift card when you buy your Galaxy Z Fold 8 at Amazon. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-preorder-deals"><span>Galaxy Z Fold 8 Ultra preorder deals</span></h3><div class="product"><a data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/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:600px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="4gDqoyT3A5J9nTa6Axevfg" name="TMobileLogo_1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4gDqoyT3A5J9nTa6Axevfg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>up to $1,900 off w/ trade-in + unlimited @ T-Mobile</strong></a><br>New and existing T-Mobile customers can get up to $1,900 off the Galaxy Z Fold 8 Ultra with trade-in and Experience Beyond data plans. Or you'll get up to $1,100 off with trade-in and on Experience More plans. Other discounts are also available for other plans. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1312px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="YFnsbuxZypxrkdepxUH3h9" name="Samsung logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YFnsbuxZypxrkdepxUH3h9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1312" height="734" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br>Samsung is knocking up to $1,200 off Galaxy Z Fold 8 Ultra purchases when you trade-in an older phone. Alternatively, you'll get a $200 credit if you don't have a trade-in. The phone features an 8-inch AMOLED (2504 x 2256) 120Hz main display, 6.5-inch AMOLED (1080 x 2520) 120Hz cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. On the rear you get a 200MP main wide-angle lens, 50MP ultra-wide lens, and 10MP telephoto lens (3x optical). Selfie cams include a 10MP main display and 10MP cover camera. In our <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a meaningful upgrade.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" 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-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25=""><strong>up to $1,200 off + free $200 GC @ Best Buy</strong></a><br>Best Buy is offering one of the best Galaxy Z Fold 8 Ultra deals around. Buy your phone at Best Buy with trade-in and you'll get up to $1,200 off. Plus, you'll get a free $200 Best Buy gift card just for your purchase. <a class="view-deal button" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.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-1920-80.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow" data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension25=""><strong>$5/month w/ trade-in + unlimited @ AT&T</strong></a><br>New and existing customers can get the Galaxy Z Fold 8 Ultra for $5.56/month when you trade in a phone with an eligible data plan. That's up to $1,900 off the phone's full price. <a class="view-deal button" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow" data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25=""><strong>up to $1,200 off w/ trade-in + unlimited @ Verizon</strong></a><br>Verizon is taking up to $1,200 off your Galaxy Z Fold 8 Ultra  with trade-in and eligible unlimited data plans. Or buy a Galaxy Fold 8 Ultra and get a free Galaxy Watch 9 and Galaxy Tab 10 FE 5G when you open a new line for each device. <a class="view-deal button" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449b24-8f79-11f1-a28e-f1483432e178" data-action="Deal Block" data-label="Z Fold 8 Ultra" data-dimension48="Z Fold 8 Ultra" data-dimension25="$2099" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a free $350 Amazon gift card when you buy your Galaxy Z Fold 8 Ultra at Amazon. It's one of the most generous deals we've seen on the unlocked version of Samsung's foldable. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow" data-dimension112="41449b24-8f79-11f1-a28e-f1483432e178" data-action="Deal Block" data-label="Z Fold 8 Ultra" data-dimension48="Z Fold 8 Ultra" data-dimension25="$2099">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&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 tested the Samsung Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra for 2 weeks — here’s the one I’d buy  ]]></title>
                                                                                                <dc:content><![CDATA[ <p>What’s in a name? In the case of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, the “Ultra” part is supposed to signal to buyers that Samsung’s flagship foldable is a higher tier of phone. And in many ways it is, from the super bright display with less of a crease to the silicon-carbon battery (a first for Samsung phones).</p><p>But at $2,099, is the Fold 8 Ultra truly an “Ultra” phone? I’ve been testing it for a couple weeks, and while there’s plenty of great upgrades, there are some ways the Fold 8 Ultra falls short of the $1,299 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>. After testing these two phones side by side, including taking lots of photos, here’s the one I'd buy.</p><h3 class="article-body__section" id="section-galaxy-fold-8-ultra-vs-galaxy-s26-ultra-specs-compared"><span>Galaxy Fold 8 Ultra vs Galaxy S26 Ultra: Specs Compared</span></h3><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Starting Price</strong></p></td><td  ><p><strong>$1,299</strong> (256GB)</p></td><td  ><p><strong>$2,099</strong> (256GB)</p></td></tr><tr><td class="firstcol " ><p><strong>Form Factor</strong></p></td><td  ><p>Traditional Slab / Glass-and-Metal Sandwich</p></td><td  ><p>Dual-screen Foldable</p></td></tr><tr><td class="firstcol " ><p><strong>Main Display</strong></p></td><td  ><p><strong>6.9-inch</strong> Dynamic LTPO AMOLED 2X</p><p>• 1440 x 3120 px (QHD+)</p><p>• 120Hz adaptive refresh rate</p><p>• Privacy Display</p></td><td  ><p><strong>8.0-inch</strong> Dynamic LTPO AMOLED 2X (Inner)</p><p>• 2256 x 2504 px</p><p>• 120Hz adaptive refresh rate</p><p>• Anti-reflective coating</p></td></tr><tr><td class="firstcol " ><p><strong>Cover Display</strong></p></td><td  ><p>N/A</p></td><td  ><p><strong>6.5-inch</strong> Dynamic LTPO AMOLED 2X</p><p>• 1080 x 2520 px, 120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>163.6 x 78.1 x 7.9 mm</p></td><td  ><p><strong>Folded:</strong> 158.4 x 72.8 x 8.9 mm</p><p><strong>Unfolded:</strong> 158.4 x 143.2 x 4.1 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>214 g</p></td><td  ><p>215 g</p></td></tr><tr><td class="firstcol " ><p><strong>RAM Options</strong></p></td><td  ><p>12 GB (256GB/512GB) / 16 GB (1TB)</p></td><td  ><p>12 GB (256GB/512GB) / 16 GB (1TB)</p></td></tr><tr><td class="firstcol " ><p><strong>Storage Options</strong></p></td><td  ><p>256 GB / 512 GB / 1 TB (UFS 4.0)</p></td><td  ><p>256 GB / 512 GB / 1 TB</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Qualcomm Snapdragon 8 Elite Gen 5</p></td><td  ><p>Qualcomm Snapdragon 8 Elite Gen 5</p></td></tr><tr><td class="firstcol " ><p><strong>Durability Rating</strong></p></td><td  ><p><strong>IP68</strong> (Dust-tight + 1.5m water)</p></td><td  ><p><strong>IP48</strong> (Particle protection >1mm + 1m water)</p></td></tr><tr><td class="firstcol " ><p><strong>S Pen Support</strong></p></td><td  ><p><strong>Yes</strong> (Built-in slot)</p></td><td  ><p><strong>No</strong> (Not supported)</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Cameras</strong></p></td><td  ><p>• 200 MP Main (OIS)</p><p>• 50 MP Ultrawide</p><p>• 10 MP 3x Telephoto</p><p>• 50 MP 5x Periscope Zoom</p></td><td  ><p>• 200 MP Main (OIS)</p><p>• 50 MP Ultrawide</p><p>• 10 MP 3x Telephoto</p></td></tr><tr><td class="firstcol " ><p><strong>Zoom Range</strong></p></td><td  ><p>Up to 100x Space Zoom</p></td><td  ><p>Up to 30x Space Zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Cameras</strong></p></td><td  ><p>12 MP (Single)</p></td><td  ><p>10 MP Cover Screen + 10 MP Inner Display</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Capacity</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speeds</strong></p></td><td  ><p>60W Wired / 25W Wireless / 4.5W Reverse</p></td><td  ><p>45W Wired / 20W Wireless / 4.5W Reverse</p></td></tr><tr><td class="firstcol " ><p><strong>Operating System</strong></p></td><td  ><p>Android 16 (One UI 8.5)</p></td><td  ><p>Android 17 (One UI 9.0)</p></td></tr><tr><td class="firstcol " ><p><strong>Color Options</strong></p></td><td  ><p>Titanium Gray, Titanium Black, Titanium Silver, Titanium Violet</p></td><td  ><p>Graphite, Cream, Violet Shadow, Green Shadow (Samsung Online Exclusive)</p></td></tr></tbody></table></div><div class="product"><a data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" 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="XUkFwYXYpdYjL4TYYivxEg" name="Samsung Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XUkFwYXYpdYjL4TYYivxEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br>The Galaxy Z Fold 8 Ultra features an 8-inch main display, 6.5-inch cover display and triple camera setup that includes a 200MP main, 50MP ultra-wide, and 10MP 3x telephoto lens. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a great upgrade.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-cobalt-violet/JJGRF36YJC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1475px;"><p class="vanilla-image-block" style="padding-top:101.69%;"><img id="pTo28Fx9tATQs3gfbYBFL5" name="Galaxy S26 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTo28Fx9tATQs3gfbYBFL5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1475" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Galaxy S26 Ultra features a 6.9-inch 3120 x 1440 AMOLED display w/ 120Hz refresh, Snapdragon 8 Elite Gen 5 CPU, 12GB of RAM, and 256GB of storage. You also get a 200MP main (f/1.4), 50MP ultra wide (f/1.9), 10MP (f/2.4) telephoto w/3x optical zoom, and a 50MP (f/2.9) telephoto w/5x optical zoom. There's also a 5,000 mAh battery. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review" data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049">Galaxy S26 Ultra review</a>, we said the Editor's Choice phone is super smart, sleek and fast. <a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-cobalt-violet/JJGRF36YJC" target="_blank" rel="nofollow" data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049">View Deal</a></p></div><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-design-and-durability"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Design and durability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2801px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="wVVitwh992iiUo4GDVZM7F" name="Galaxy Z Fold 8 Ultra review-22" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/wVVitwh992iiUo4GDVZM7F-1920-80.jpg" mos="" align="middle" fullscreen="" width="2801" height="1576" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy Z Fold 8 Ultra </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra is remarkably light and compact for a phone that unfurls to an 8-inch display. It weighs just 7.58 ounces, which is barely heavier than the Galaxy S26 Ultra that limits you to a 6.9-inch screen.</p><p>In addition, the Fold 8 Ultra is only 4.1mm thin when it’s opened, which is even thinner than the Fold 7. Still, when closed the Galaxy S26 Ultra is a millimeter thinner, which is expected for a slab phone.</p><div ><table><caption>Galaxy Z Fold 8 Ultra vs. S26 Ultra: Size and weight</caption><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>State</strong></p></td><td  ><p><strong>Dimensions (H × W × D)</strong></p></td><td  ><p><strong>Weight</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Unfolded (Open)</strong></p></td><td  ><p>6.24 × 5.64 × 0.16 in (158.4 × 143.2 × 4.1 mm)</p></td><td  ><p>7.58 oz (215 g)</p></td></tr><tr><td class="firstcol empty" ></td><td  ><p><strong>Folded (Closed)</strong></p></td><td  ><p>6.24 × 2.87 × 0.35 in (158.4 × 72.8 × 8.9 mm)</p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td><td  ><p><strong>Standard</strong></p></td><td  ><p>6.44 × 3.07 × 0.31 in (163.6 × 78.1 × 7.9 mm)</p></td><td  ><p>7.55 oz (214 g)</p></td></tr></tbody></table></div><p>The Fold 8 Ultra may be thinner, but it’s definitely not ready for a day at the beach. This foldable is once again IP48 rated, which means it can withstand being submerged in water for 30 minutes — but it is not dust resistant.</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:3733px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="YpCNYCr6ACAQ2JPhGn3KuK" name="Galaxy S26 Ultra review-LIST2" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/YpCNYCr6ACAQ2JPhGn3KuK-1920-80.jpg" mos="" align="middle" fullscreen="" width="3733" height="2100" 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>However, the Galaxy S26 Ultra carries an IP68 rating, which means the phone is dust tight. It’s also worth mentioning that other foldables are rated IP68, including the Motorola Razr Fold and Google Pixel 10 Pro Fold.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-displays"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Displays</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3462px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="s4PcUkqvHoinhjuVyNZ6gW" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-2" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/s4PcUkqvHoinhjuVyNZ6gW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3462" height="1947" 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 Galaxy Z Fold 8 packs dual screens: a 6.5-inch cover display that’s fine for running apps (if a bit cramped for typing) and a huge 8-inch main display. And the S26 Ultra has a 6.9-inch panel.</p><p>The main reason to get the Fold 8 Ultra is the bigger main display. With 8 inches at your disposal, you get a more immersive video watching experience, as well as the ability to run apps side by side.</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="iGEKAZXpueuG4YxyKtptrR" name="Fold 8 Ultra vs S26 Ultra displays" alt="Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra in hand" src="https://cdn.mos.cms.futurecdn.net/iGEKAZXpueuG4YxyKtptrR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>What you don’t get is the S26 Ultra’s Privacy Display, which narrows the viewing angle for any snoops around you and can even black out just parts of the display.</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="sY6mMGM5VbiNoDMrS3Gt4h" name="Galaxy S26 Ultra privacy screen LIST" alt="Samsung Galaxy S26 Ultra showing Privacy Display" src="https://cdn.mos.cms.futurecdn.net/sY6mMGM5VbiNoDMrS3Gt4h-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I really like that the Fold 8 Ultra features an anti-reflective coating that seriously cuts down on glare when you’re outside. Plus, thanks to Samsung’s Flex Titanium technology, the Galaxy Z Fold 8’s crease is much less visible than previous Samsung foldable phones. It’s still there, but more subtle.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Brightness HDR (nits)</strong></p></td><td  ><p><strong>Color (DCI-P3)</strong></p></td><td  ><p><strong>Accuracy (Delta-E)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold  Ultra</strong></p></td><td  ><p>2,687</p></td><td  ><p>116.6% (Natural)</p></td><td  ><p>0.2</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>1,806</p></td><td  ><p>90.6% (Natural)</p></td><td  ><p>0.22</p></td></tr></tbody></table></div><p>Thanks to a brighter screen, I also found using the Z Fold 8 outside in direct sunlight a lot easier, whether I was browsing the web or just taking or reviewing photos. On previous Samsung Folds, I mostly used the external screen for taking pics.</p><p>In our lab testing the Z Fold 8 Ultra hit 2,687 nits of brightness with HDR content. That’s considerably higher than the S26 Ultra’s 1,806 nits.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-s-pen"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: S Pen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4345px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AQBTHresRLkR56MSUmEFMM" name="Galaxy S26 Ultra review-17" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/AQBTHresRLkR56MSUmEFMM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4345" height="2444" 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>Samsung ditched the S Pen on the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a> in order to make a thinner design and it’s still missing on the Fold 8 Ultra. Without a built-in digitizer for the screen, you simply can’t use an S Pen.</p><p>Meanwhile, the S26 Ultra has an S Pen built into the design. So you can use the stylus for taking notes, drawing and making fine edits on the go. </p><p>I spoke to Samsung executives about the missing S Pen on the Fold and they’re <a href="https://www.tomsguide.com/phones/samsung-phones/no-the-fold-8-doesnt-have-an-s-pen-but-samsung-is-exploring-its-return-for-future-folds">“open” to bringing it back</a>.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-cameras"><span>Galaxy Z Fold 8 Ultra vs. 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:3441px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="TnA5425ZLKYYYgLYV3DJDG" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-3" alt="Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra rear cameras" src="https://cdn.mos.cms.futurecdn.net/TnA5425ZLKYYYgLYV3DJDG-1920-80.jpg" mos="" align="middle" fullscreen="" width="3441" height="1936" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra has an <em>Ultra-ish</em> camera setup, starting with a 200MP main camera and 50MP ultraside, same as on the Galaxy S26 Ultra. But the new foldable falls down in the zoom department.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/aepV355MZkiSHL9bNuGfBo-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ttHc5QQrF7xwUSmwWn8QBo-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/BKQv5NjgvAqWQGAzbbDNsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Tbcsv6heCjtKjWPzdCbZsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Let’s start with the good news. In most conditions, the main and ultrawide cameras on the Fold 8 and S26 Ultra turned in nearly identical results, whether it was flower close-up ultra-wide shots of Bryant Park or portraits. Panoramas were similar, too.</p><iframe allow="" height="395" 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=b187e00e-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>It’s when you try to get in close that the Fold 8, well, folds. While the S26 Ultra packs dual telephoto zoom lenses at 3x and 5x with a maximum of 100x digital zoom, the Fold 8 Ultra has only a single 10MP telephoto lens with 3x optical zoom and 30x digital zoom.</p><p>Check out this close-up of an ice cream truck. At 30x, you can make out all of the menu names underneath the pictures of the cones on the S26 Ultra. On the Fold 8 Ultra it’s just a bunch of blobs.</p><iframe allow="" height="395" 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=3ddb19aa-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>Same thing with this shot of a medieval scholar sculpture on the side of a New York City building. At 10x, you can make out more details in his face, hair and garb. And at 30x the Fold 8’s Ultra’s shot looks like an impressionist painting by comparison.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/uKqxNfpVJr8eBRAQFcvTFi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - 10x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KuTqZjwfj6Cj3esegBBuii-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra - 10x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GdFLdXVo8dWBJ9L5eHYGxh-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - 30x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iuHdLkoLEJZT8xfG94DUFi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra - 30x<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The S26 Ultra has a slight selfie advantage, too, with a 12MP front camera. The Fold 8 Ultra has dual 10MP shooters. But the results are pretty close in my eyes. The advantage the Fold has is that you can flip around the cover display and take super sharp selfies with the rear cameras.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Qtm4PmZ2UEHeBpzsJ86rgi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Main camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/e8xVg6WGnZz9BPZSEvcrni-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Front camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/2jRFCRn8ANYoQ8b5WJRcoi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>I’d say the Fold 8 Ultra and S26 Ultra are fairly evenly matched in low-light settings. In this photo of a record player in near darkness, the S26 Ultra delivered a brighter and crisper shot. The colors look more realistic too, especially in the pink macrame.</p><iframe allow="" height="395" 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=d70c81d2-91cf-11f1-ba1b-0e6f42328d7d"></iframe><p>However, while the S26 Ultra gave me a brighter shot of the bottles in this bar, especially the blue Casa Azul, the text looks sharper through the Fold 8 Ultra.</p><iframe allow="" height="395" 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=b8df2c0a-91cf-11f1-ba1b-0e6f42328d7d"></iframe><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-performance"><span>Galaxy Z Fold 8 Ultra vs. 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:3684px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="bFv6s9UZuRZHPMckD5pxaL" name="Galaxy S26 Ultra review-27" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/bFv6s9UZuRZHPMckD5pxaL-1920-80.jpg" mos="" align="middle" fullscreen="" width="3684" height="2072" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy S26 Ultra </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Packing the same Snapdragon 8 Elite Gen 5 chip for Galaxy, the Galaxy Z Fold 8 Ultra and S26 Ultra are both multitasking powerhouses, and they’re both great for gaming.</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="yAdRaBVHZ6CPwD4QtQ3UxE" name="fold 8 ultra gaming" alt="Playing Wuthering Waves on Galaxy Z Fold 8 Ultra" src="https://cdn.mos.cms.futurecdn.net/yAdRaBVHZ6CPwD4QtQ3UxE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>In our lab tests, the S26 Ultra finished slightly ahead in Geekbench, 3DMark graphics and Geekbench AI, but I wouldn’t say it’s a big difference.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 6 (Single/Multicore)</strong></p></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p></td><td  ><p><strong>Geekbench AI</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>3,110/10,578</p></td><td  ><p>49.24/12,950</p></td><td  ><p>71715</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>3,733/11,457</p></td><td  ><p>49.37 / 12,984</p></td><td  ><p>83047 </p></td></tr></tbody></table></div><p>The S26 Ultra could be helped by the fact that it has vapor chamber cooling, while the Fold 8 Ultra does not.</p><p>I played Wuthering Waves on both the Fold 8 Ultra and S26 Ultra, and it was more immersive on the Fold because of its large display. But I found it a touch smoother on the S26 Ultra.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-battery-life-and-charging"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Battery life and 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:2907px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="w8dEoJdD9j97ChKpUrPWwF" name="Galaxy S26 Ultra review" alt="Samsung Galaxy S26 Ultra with 60W charger" src="https://cdn.mos.cms.futurecdn.net/w8dEoJdD9j97ChKpUrPWwF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2907" height="1635" 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>Samsung has made the leap to silicon-carbon battery tech with the Fold 8 Ultra, going from 4,400 mAh on the Fold 7 to 5,000 mAh on its latest foldable. That’s the same capacity as the S26 Ultra albeit with lithium ion.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Hours:Mins</strong></p></td><td  ><p><strong>15-min charge</strong></p></td><td  ><p><strong>30-min charge</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></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>Galaxy S26 Ultra</strong></p></td><td  ><p>16:40 </p></td><td  ><p>41%</p></td><td  ><p>77%</p></td></tr></tbody></table></div><p>On the Tom’s Guide battery test, which involves continuous web surfing over 5G, the Galaxy Z Fold 8 Ultra lasted an impressive 14 hours and 33 minutes. That’s a huge upgrade over the 11 hours turned in by the Fold 7.</p><p>The Galaxy S26 Ultra lasted an even longer 16 hours and 40 minutes, but keep in mind that it was powering a smaller 6.9-inch display compared to the 8-inch screen on the Fold 8.</p><p>The Fold 8 offers 45W wired charging and 20W wireless charging, compared to 60W wired and 25W wireless on the S26 Ultra. But the phones turned in similar results in our wired charging test.</p><p>The Fold 8 Ultra got to 76% in 30 minutes versus 77% for the S26 Ultra. Note that neither phone has built-in magnets for Qi 2 charging, so you’ll have to buy a case with that feature.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-software-and-special-features"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Software and special 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:4592px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dSkYa6nb5vfELq9CZP9HkM" name="Galaxy S26 Ultra review-21" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dSkYa6nb5vfELq9CZP9HkM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4592" height="2583" 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>Both the Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra offer a bunch of AI features that come in handy, including automated actions with Gemini (like helping to book dinner reservations or even vacations), Call Screening and Now Brief for summarizing your daily schedule. They also both let you transform your photos with a simple voice prompt.</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:3617px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="TFyBCFPuPGGHLrmtZ8NaYL" name="Galaxy S26 Ultra review-6" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/TFyBCFPuPGGHLrmtZ8NaYL-1920-80.jpg" mos="" align="middle" fullscreen="" width="3617" height="2035" 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>However, the Fold 8 Ultra offers a few unique tricks of its own. This includes Now Nudge in Split View, which can give you quick hints for opening a second app on its own screen to save time. And My FanCam can automatically follow a subject in your video, cropping the clip on the fly.</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="FTAPbqnyMxnn72TGFVq4Eg" name="Galaxy Z Fold 8 Ultra-29" alt="Galaxy Z Fold 8 Ultra Flex Mode" src="https://cdn.mos.cms.futurecdn.net/FTAPbqnyMxnn72TGFVq4Eg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy Z Fold 8 Ultra Flex Mode </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Plus, unlike the Galaxy S26 Ultra, the Fold 8 Ultra boasts a Flex Mode for using the foldable like a mini laptop. And when shooting photos and videos you can use the Cover Screen preview feature to let the subjects see themselves in real time.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-verdict"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2046px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="nyEE9BKEyuBBNQFxKmYmcP" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-4" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-4" src="https://cdn.mos.cms.futurecdn.net/nyEE9BKEyuBBNQFxKmYmcP-1920-80.jpg" mos="" align="middle" fullscreen="" width="2046" height="1151" 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’m not going to say that calling the Galaxy Z Fold 8 Ultra an Ultra phone is false advertising, but you do have to make a bunch of trade-offs versus the Galaxy S26 Ultra.</p><p>With the foldable you don’t get an S Pen or an IP68 rating for dust resistance, and the S26 Ultra offers both a more powerful telephoto zoom and Privacy Display feature. Plus, the S26 Ultra lasted longer on a charge.</p><p>However, the Galaxy Z Fold 8 Ultra is a very versatile foldable phone that grants you a much bigger display, the ability to run up three apps at once and handy AI tools like Now Nudge with Split View.</p><p>But at $2,099, the Fold 8 Ultra costs $800 more than the S26 Ultra. So you really, really want to own a foldable if you’re going that route. </p><p>Bottom line: If you want the ultimate multi-tasking powerhouse, get the Fold 8 Ultra. But if you want the biggest zoom, best-in-class privacy and an S Pen, snag the S26 Ultra for less.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra</link>
                                                                            <description>
                            <![CDATA[ I compared the Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra side by side in terms of design, durability, features and performance to help you pick the right flagship for you. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">pWm7apZ2eAGEG6QZmCkxgn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/A6iyDHHwEjWBJKYW5FPrpW-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 07 Aug 2026 04:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 13 Aug 2026 11:25:19 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo-320-70.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/A6iyDHHwEjWBJKYW5FPrpW-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/A6iyDHHwEjWBJKYW5FPrpW-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>What’s in a name? In the case of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, the “Ultra” part is supposed to signal to buyers that Samsung’s flagship foldable is a higher tier of phone. And in many ways it is, from the super bright display with less of a crease to the silicon-carbon battery (a first for Samsung phones).</p><p>But at $2,099, is the Fold 8 Ultra truly an “Ultra” phone? I’ve been testing it for a couple weeks, and while there’s plenty of great upgrades, there are some ways the Fold 8 Ultra falls short of the $1,299 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>. After testing these two phones side by side, including taking lots of photos, here’s the one I'd buy.</p><h3 class="article-body__section" id="section-galaxy-fold-8-ultra-vs-galaxy-s26-ultra-specs-compared"><span>Galaxy Fold 8 Ultra vs Galaxy S26 Ultra: Specs Compared</span></h3><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Starting Price</strong></p></td><td  ><p><strong>$1,299</strong> (256GB)</p></td><td  ><p><strong>$2,099</strong> (256GB)</p></td></tr><tr><td class="firstcol " ><p><strong>Form Factor</strong></p></td><td  ><p>Traditional Slab / Glass-and-Metal Sandwich</p></td><td  ><p>Dual-screen Foldable</p></td></tr><tr><td class="firstcol " ><p><strong>Main Display</strong></p></td><td  ><p><strong>6.9-inch</strong> Dynamic LTPO AMOLED 2X</p><p>• 1440 x 3120 px (QHD+)</p><p>• 120Hz adaptive refresh rate</p><p>• Privacy Display</p></td><td  ><p><strong>8.0-inch</strong> Dynamic LTPO AMOLED 2X (Inner)</p><p>• 2256 x 2504 px</p><p>• 120Hz adaptive refresh rate</p><p>• Anti-reflective coating</p></td></tr><tr><td class="firstcol " ><p><strong>Cover Display</strong></p></td><td  ><p>N/A</p></td><td  ><p><strong>6.5-inch</strong> Dynamic LTPO AMOLED 2X</p><p>• 1080 x 2520 px, 120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>163.6 x 78.1 x 7.9 mm</p></td><td  ><p><strong>Folded:</strong> 158.4 x 72.8 x 8.9 mm</p><p><strong>Unfolded:</strong> 158.4 x 143.2 x 4.1 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>214 g</p></td><td  ><p>215 g</p></td></tr><tr><td class="firstcol " ><p><strong>RAM Options</strong></p></td><td  ><p>12 GB (256GB/512GB) / 16 GB (1TB)</p></td><td  ><p>12 GB (256GB/512GB) / 16 GB (1TB)</p></td></tr><tr><td class="firstcol " ><p><strong>Storage Options</strong></p></td><td  ><p>256 GB / 512 GB / 1 TB (UFS 4.0)</p></td><td  ><p>256 GB / 512 GB / 1 TB</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Qualcomm Snapdragon 8 Elite Gen 5</p></td><td  ><p>Qualcomm Snapdragon 8 Elite Gen 5</p></td></tr><tr><td class="firstcol " ><p><strong>Durability Rating</strong></p></td><td  ><p><strong>IP68</strong> (Dust-tight + 1.5m water)</p></td><td  ><p><strong>IP48</strong> (Particle protection >1mm + 1m water)</p></td></tr><tr><td class="firstcol " ><p><strong>S Pen Support</strong></p></td><td  ><p><strong>Yes</strong> (Built-in slot)</p></td><td  ><p><strong>No</strong> (Not supported)</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Cameras</strong></p></td><td  ><p>• 200 MP Main (OIS)</p><p>• 50 MP Ultrawide</p><p>• 10 MP 3x Telephoto</p><p>• 50 MP 5x Periscope Zoom</p></td><td  ><p>• 200 MP Main (OIS)</p><p>• 50 MP Ultrawide</p><p>• 10 MP 3x Telephoto</p></td></tr><tr><td class="firstcol " ><p><strong>Zoom Range</strong></p></td><td  ><p>Up to 100x Space Zoom</p></td><td  ><p>Up to 30x Space Zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Cameras</strong></p></td><td  ><p>12 MP (Single)</p></td><td  ><p>10 MP Cover Screen + 10 MP Inner Display</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Capacity</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speeds</strong></p></td><td  ><p>60W Wired / 25W Wireless / 4.5W Reverse</p></td><td  ><p>45W Wired / 20W Wireless / 4.5W Reverse</p></td></tr><tr><td class="firstcol " ><p><strong>Operating System</strong></p></td><td  ><p>Android 16 (One UI 8.5)</p></td><td  ><p>Android 17 (One UI 9.0)</p></td></tr><tr><td class="firstcol " ><p><strong>Color Options</strong></p></td><td  ><p>Titanium Gray, Titanium Black, Titanium Silver, Titanium Violet</p></td><td  ><p>Graphite, Cream, Violet Shadow, Green Shadow (Samsung Online Exclusive)</p></td></tr></tbody></table></div><div class="product"><a data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" 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="XUkFwYXYpdYjL4TYYivxEg" name="Samsung Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XUkFwYXYpdYjL4TYYivxEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br>The Galaxy Z Fold 8 Ultra features an 8-inch main display, 6.5-inch cover display and triple camera setup that includes a 200MP main, 50MP ultra-wide, and 10MP 3x telephoto lens. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a great upgrade.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-cobalt-violet/JJGRF36YJC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1475px;"><p class="vanilla-image-block" style="padding-top:101.69%;"><img id="pTo28Fx9tATQs3gfbYBFL5" name="Galaxy S26 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTo28Fx9tATQs3gfbYBFL5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1475" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Galaxy S26 Ultra features a 6.9-inch 3120 x 1440 AMOLED display w/ 120Hz refresh, Snapdragon 8 Elite Gen 5 CPU, 12GB of RAM, and 256GB of storage. You also get a 200MP main (f/1.4), 50MP ultra wide (f/1.9), 10MP (f/2.4) telephoto w/3x optical zoom, and a 50MP (f/2.9) telephoto w/5x optical zoom. There's also a 5,000 mAh battery. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review" data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049">Galaxy S26 Ultra review</a>, we said the Editor's Choice phone is super smart, sleek and fast. <a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-cobalt-violet/JJGRF36YJC" target="_blank" rel="nofollow" data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049">View Deal</a></p></div><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-design-and-durability"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Design and durability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2801px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="wVVitwh992iiUo4GDVZM7F" name="Galaxy Z Fold 8 Ultra review-22" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/wVVitwh992iiUo4GDVZM7F-1920-80.jpg" mos="" align="middle" fullscreen="" width="2801" height="1576" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy Z Fold 8 Ultra </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra is remarkably light and compact for a phone that unfurls to an 8-inch display. It weighs just 7.58 ounces, which is barely heavier than the Galaxy S26 Ultra that limits you to a 6.9-inch screen.</p><p>In addition, the Fold 8 Ultra is only 4.1mm thin when it’s opened, which is even thinner than the Fold 7. Still, when closed the Galaxy S26 Ultra is a millimeter thinner, which is expected for a slab phone.</p><div ><table><caption>Galaxy Z Fold 8 Ultra vs. S26 Ultra: Size and weight</caption><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>State</strong></p></td><td  ><p><strong>Dimensions (H × W × D)</strong></p></td><td  ><p><strong>Weight</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Unfolded (Open)</strong></p></td><td  ><p>6.24 × 5.64 × 0.16 in (158.4 × 143.2 × 4.1 mm)</p></td><td  ><p>7.58 oz (215 g)</p></td></tr><tr><td class="firstcol empty" ></td><td  ><p><strong>Folded (Closed)</strong></p></td><td  ><p>6.24 × 2.87 × 0.35 in (158.4 × 72.8 × 8.9 mm)</p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td><td  ><p><strong>Standard</strong></p></td><td  ><p>6.44 × 3.07 × 0.31 in (163.6 × 78.1 × 7.9 mm)</p></td><td  ><p>7.55 oz (214 g)</p></td></tr></tbody></table></div><p>The Fold 8 Ultra may be thinner, but it’s definitely not ready for a day at the beach. This foldable is once again IP48 rated, which means it can withstand being submerged in water for 30 minutes — but it is not dust resistant.</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:3733px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="YpCNYCr6ACAQ2JPhGn3KuK" name="Galaxy S26 Ultra review-LIST2" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/YpCNYCr6ACAQ2JPhGn3KuK-1920-80.jpg" mos="" align="middle" fullscreen="" width="3733" height="2100" 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>However, the Galaxy S26 Ultra carries an IP68 rating, which means the phone is dust tight. It’s also worth mentioning that other foldables are rated IP68, including the Motorola Razr Fold and Google Pixel 10 Pro Fold.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-displays"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Displays</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3462px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="s4PcUkqvHoinhjuVyNZ6gW" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-2" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/s4PcUkqvHoinhjuVyNZ6gW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3462" height="1947" 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 Galaxy Z Fold 8 packs dual screens: a 6.5-inch cover display that’s fine for running apps (if a bit cramped for typing) and a huge 8-inch main display. And the S26 Ultra has a 6.9-inch panel.</p><p>The main reason to get the Fold 8 Ultra is the bigger main display. With 8 inches at your disposal, you get a more immersive video watching experience, as well as the ability to run apps side by side.</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="iGEKAZXpueuG4YxyKtptrR" name="Fold 8 Ultra vs S26 Ultra displays" alt="Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra in hand" src="https://cdn.mos.cms.futurecdn.net/iGEKAZXpueuG4YxyKtptrR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>What you don’t get is the S26 Ultra’s Privacy Display, which narrows the viewing angle for any snoops around you and can even black out just parts of the display.</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="sY6mMGM5VbiNoDMrS3Gt4h" name="Galaxy S26 Ultra privacy screen LIST" alt="Samsung Galaxy S26 Ultra showing Privacy Display" src="https://cdn.mos.cms.futurecdn.net/sY6mMGM5VbiNoDMrS3Gt4h-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I really like that the Fold 8 Ultra features an anti-reflective coating that seriously cuts down on glare when you’re outside. Plus, thanks to Samsung’s Flex Titanium technology, the Galaxy Z Fold 8’s crease is much less visible than previous Samsung foldable phones. It’s still there, but more subtle.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Brightness HDR (nits)</strong></p></td><td  ><p><strong>Color (DCI-P3)</strong></p></td><td  ><p><strong>Accuracy (Delta-E)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold  Ultra</strong></p></td><td  ><p>2,687</p></td><td  ><p>116.6% (Natural)</p></td><td  ><p>0.2</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>1,806</p></td><td  ><p>90.6% (Natural)</p></td><td  ><p>0.22</p></td></tr></tbody></table></div><p>Thanks to a brighter screen, I also found using the Z Fold 8 outside in direct sunlight a lot easier, whether I was browsing the web or just taking or reviewing photos. On previous Samsung Folds, I mostly used the external screen for taking pics.</p><p>In our lab testing the Z Fold 8 Ultra hit 2,687 nits of brightness with HDR content. That’s considerably higher than the S26 Ultra’s 1,806 nits.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-s-pen"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: S Pen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4345px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AQBTHresRLkR56MSUmEFMM" name="Galaxy S26 Ultra review-17" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/AQBTHresRLkR56MSUmEFMM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4345" height="2444" 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>Samsung ditched the S Pen on the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a> in order to make a thinner design and it’s still missing on the Fold 8 Ultra. Without a built-in digitizer for the screen, you simply can’t use an S Pen.</p><p>Meanwhile, the S26 Ultra has an S Pen built into the design. So you can use the stylus for taking notes, drawing and making fine edits on the go. </p><p>I spoke to Samsung executives about the missing S Pen on the Fold and they’re <a href="https://www.tomsguide.com/phones/samsung-phones/no-the-fold-8-doesnt-have-an-s-pen-but-samsung-is-exploring-its-return-for-future-folds">“open” to bringing it back</a>.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-cameras"><span>Galaxy Z Fold 8 Ultra vs. 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:3441px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="TnA5425ZLKYYYgLYV3DJDG" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-3" alt="Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra rear cameras" src="https://cdn.mos.cms.futurecdn.net/TnA5425ZLKYYYgLYV3DJDG-1920-80.jpg" mos="" align="middle" fullscreen="" width="3441" height="1936" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra has an <em>Ultra-ish</em> camera setup, starting with a 200MP main camera and 50MP ultraside, same as on the Galaxy S26 Ultra. But the new foldable falls down in the zoom department.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/aepV355MZkiSHL9bNuGfBo-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ttHc5QQrF7xwUSmwWn8QBo-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/BKQv5NjgvAqWQGAzbbDNsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Tbcsv6heCjtKjWPzdCbZsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Let’s start with the good news. In most conditions, the main and ultrawide cameras on the Fold 8 and S26 Ultra turned in nearly identical results, whether it was flower close-up ultra-wide shots of Bryant Park or portraits. Panoramas were similar, too.</p><iframe allow="" height="395" 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=b187e00e-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>It’s when you try to get in close that the Fold 8, well, folds. While the S26 Ultra packs dual telephoto zoom lenses at 3x and 5x with a maximum of 100x digital zoom, the Fold 8 Ultra has only a single 10MP telephoto lens with 3x optical zoom and 30x digital zoom.</p><p>Check out this close-up of an ice cream truck. At 30x, you can make out all of the menu names underneath the pictures of the cones on the S26 Ultra. On the Fold 8 Ultra it’s just a bunch of blobs.</p><iframe allow="" height="395" 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=3ddb19aa-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>Same thing with this shot of a medieval scholar sculpture on the side of a New York City building. At 10x, you can make out more details in his face, hair and garb. And at 30x the Fold 8’s Ultra’s shot looks like an impressionist painting by comparison.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/uKqxNfpVJr8eBRAQFcvTFi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - 10x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KuTqZjwfj6Cj3esegBBuii-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra - 10x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GdFLdXVo8dWBJ9L5eHYGxh-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - 30x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iuHdLkoLEJZT8xfG94DUFi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra - 30x<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The S26 Ultra has a slight selfie advantage, too, with a 12MP front camera. The Fold 8 Ultra has dual 10MP shooters. But the results are pretty close in my eyes. The advantage the Fold has is that you can flip around the cover display and take super sharp selfies with the rear cameras.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Qtm4PmZ2UEHeBpzsJ86rgi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Main camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/e8xVg6WGnZz9BPZSEvcrni-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Front camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/2jRFCRn8ANYoQ8b5WJRcoi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>I’d say the Fold 8 Ultra and S26 Ultra are fairly evenly matched in low-light settings. In this photo of a record player in near darkness, the S26 Ultra delivered a brighter and crisper shot. The colors look more realistic too, especially in the pink macrame.</p><iframe allow="" height="395" 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=d70c81d2-91cf-11f1-ba1b-0e6f42328d7d"></iframe><p>However, while the S26 Ultra gave me a brighter shot of the bottles in this bar, especially the blue Casa Azul, the text looks sharper through the Fold 8 Ultra.</p><iframe allow="" height="395" 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=b8df2c0a-91cf-11f1-ba1b-0e6f42328d7d"></iframe><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-performance"><span>Galaxy Z Fold 8 Ultra vs. 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:3684px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="bFv6s9UZuRZHPMckD5pxaL" name="Galaxy S26 Ultra review-27" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/bFv6s9UZuRZHPMckD5pxaL-1920-80.jpg" mos="" align="middle" fullscreen="" width="3684" height="2072" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy S26 Ultra </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Packing the same Snapdragon 8 Elite Gen 5 chip for Galaxy, the Galaxy Z Fold 8 Ultra and S26 Ultra are both multitasking powerhouses, and they’re both great for gaming.</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="yAdRaBVHZ6CPwD4QtQ3UxE" name="fold 8 ultra gaming" alt="Playing Wuthering Waves on Galaxy Z Fold 8 Ultra" src="https://cdn.mos.cms.futurecdn.net/yAdRaBVHZ6CPwD4QtQ3UxE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>In our lab tests, the S26 Ultra finished slightly ahead in Geekbench, 3DMark graphics and Geekbench AI, but I wouldn’t say it’s a big difference.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 6 (Single/Multicore)</strong></p></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p></td><td  ><p><strong>Geekbench AI</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>3,110/10,578</p></td><td  ><p>49.24/12,950</p></td><td  ><p>71715</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>3,733/11,457</p></td><td  ><p>49.37 / 12,984</p></td><td  ><p>83047 </p></td></tr></tbody></table></div><p>The S26 Ultra could be helped by the fact that it has vapor chamber cooling, while the Fold 8 Ultra does not.</p><p>I played Wuthering Waves on both the Fold 8 Ultra and S26 Ultra, and it was more immersive on the Fold because of its large display. But I found it a touch smoother on the S26 Ultra.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-battery-life-and-charging"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Battery life and 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:2907px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="w8dEoJdD9j97ChKpUrPWwF" name="Galaxy S26 Ultra review" alt="Samsung Galaxy S26 Ultra with 60W charger" src="https://cdn.mos.cms.futurecdn.net/w8dEoJdD9j97ChKpUrPWwF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2907" height="1635" 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>Samsung has made the leap to silicon-carbon battery tech with the Fold 8 Ultra, going from 4,400 mAh on the Fold 7 to 5,000 mAh on its latest foldable. That’s the same capacity as the S26 Ultra albeit with lithium ion.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Hours:Mins</strong></p></td><td  ><p><strong>15-min charge</strong></p></td><td  ><p><strong>30-min charge</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></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>Galaxy S26 Ultra</strong></p></td><td  ><p>16:40 </p></td><td  ><p>41%</p></td><td  ><p>77%</p></td></tr></tbody></table></div><p>On the Tom’s Guide battery test, which involves continuous web surfing over 5G, the Galaxy Z Fold 8 Ultra lasted an impressive 14 hours and 33 minutes. That’s a huge upgrade over the 11 hours turned in by the Fold 7.</p><p>The Galaxy S26 Ultra lasted an even longer 16 hours and 40 minutes, but keep in mind that it was powering a smaller 6.9-inch display compared to the 8-inch screen on the Fold 8.</p><p>The Fold 8 offers 45W wired charging and 20W wireless charging, compared to 60W wired and 25W wireless on the S26 Ultra. But the phones turned in similar results in our wired charging test.</p><p>The Fold 8 Ultra got to 76% in 30 minutes versus 77% for the S26 Ultra. Note that neither phone has built-in magnets for Qi 2 charging, so you’ll have to buy a case with that feature.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-software-and-special-features"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Software and special 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:4592px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dSkYa6nb5vfELq9CZP9HkM" name="Galaxy S26 Ultra review-21" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dSkYa6nb5vfELq9CZP9HkM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4592" height="2583" 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>Both the Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra offer a bunch of AI features that come in handy, including automated actions with Gemini (like helping to book dinner reservations or even vacations), Call Screening and Now Brief for summarizing your daily schedule. They also both let you transform your photos with a simple voice prompt.</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:3617px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="TFyBCFPuPGGHLrmtZ8NaYL" name="Galaxy S26 Ultra review-6" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/TFyBCFPuPGGHLrmtZ8NaYL-1920-80.jpg" mos="" align="middle" fullscreen="" width="3617" height="2035" 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>However, the Fold 8 Ultra offers a few unique tricks of its own. This includes Now Nudge in Split View, which can give you quick hints for opening a second app on its own screen to save time. And My FanCam can automatically follow a subject in your video, cropping the clip on the fly.</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="FTAPbqnyMxnn72TGFVq4Eg" name="Galaxy Z Fold 8 Ultra-29" alt="Galaxy Z Fold 8 Ultra Flex Mode" src="https://cdn.mos.cms.futurecdn.net/FTAPbqnyMxnn72TGFVq4Eg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy Z Fold 8 Ultra Flex Mode </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Plus, unlike the Galaxy S26 Ultra, the Fold 8 Ultra boasts a Flex Mode for using the foldable like a mini laptop. And when shooting photos and videos you can use the Cover Screen preview feature to let the subjects see themselves in real time.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-verdict"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2046px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="nyEE9BKEyuBBNQFxKmYmcP" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-4" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-4" src="https://cdn.mos.cms.futurecdn.net/nyEE9BKEyuBBNQFxKmYmcP-1920-80.jpg" mos="" align="middle" fullscreen="" width="2046" height="1151" 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’m not going to say that calling the Galaxy Z Fold 8 Ultra an Ultra phone is false advertising, but you do have to make a bunch of trade-offs versus the Galaxy S26 Ultra.</p><p>With the foldable you don’t get an S Pen or an IP68 rating for dust resistance, and the S26 Ultra offers both a more powerful telephoto zoom and Privacy Display feature. Plus, the S26 Ultra lasted longer on a charge.</p><p>However, the Galaxy Z Fold 8 Ultra is a very versatile foldable phone that grants you a much bigger display, the ability to run up three apps at once and handy AI tools like Now Nudge with Split View.</p><p>But at $2,099, the Fold 8 Ultra costs $800 more than the S26 Ultra. So you really, really want to own a foldable if you’re going that route. </p><p>Bottom line: If you want the ultimate multi-tasking powerhouse, get the Fold 8 Ultra. But if you want the biggest zoom, best-in-class privacy and an S Pen, snag the S26 Ultra for less.</p>
                                                            </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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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[ I just tried the new Samsung DeX on the Galaxy Z Fold 8 — and it has one huge upgrade ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Samsung’s new foldable phones are almost here, and if you’re planning to get any of them, you should know about their most underrated feature in my opinion: <a href="https://www.tomsguide.com/us/samsung-dex,review-4383.html">Samsung DeX</a>. This year’s lineup consists of three new foldables — the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">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> — which all come with the latest version of Samsung’s desktop interface.</p><p>Just as before, you can easily access DeX by plugging them directly into a monitor, whether via USB-C, an HDMI port using a USB hub, or even wirelessly on a supported display or TV. I’ve been testing this new Samsung DeX for the past week, and it gains one specific feature that makes it more useful for productivity.</p><p>In fact, this new Samsung DeX is exactly like the one I tested on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-dex-quietly-gets-a-makeover-with-the-galaxy-s26-and-its-now-much-more-like-a-windows-pc">Galaxy S26 from earlier this year</a> — which inherited it from the now-discontinued <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-trifold-review">Galaxy Z TriFold</a>.</p><h2 class="article-body__section" id="section-samsung-dex-on-fold-8-and-flip-8-what-s-new"><span>Samsung DeX on Fold 8 and Flip 8: What's new</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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="myCzeL2Fx2qx6pwtusH3kA" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/myCzeL2Fx2qx6pwtusH3kA-1920-80.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 only new addition to this year’s Samsung DeX is the ability to create up to four workspaces. <strong>Each desktop can support up to five apps, which means I can run 20 different apps simultaneously.</strong></p><p>While I don’t need to actively use that many apps at once, having them organized makes a huge difference. For instance, I’ve set up one workspace strictly for work-related apps I frequently access — like Slack, Gmail, Chrome, Google Docs, and Messages. In another, I have my social networking apps, while a third is dedicated to editing apps I use consistently, such as CapCut, PhotoDirector, and PowerDirector.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/WjFVzPdrf9soNGKJisYh6o-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vkBfgjGzVoYbz3CtzTFLD-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RCpxo3oYw85TxcVJiNbLYn-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/72eYELvVWUVfzY6kWhdLHn-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>By clicking the icon with the three vertical lines in the lower-left corner of the interface, I can easily jump to the workspace I need — which functions very similarly to how Windows 11 handles multiple desktops. With access to more workspaces, I can keep my apps organized and stay much more productive.</p><h2 class="article-body__section" id="section-samsung-dex-on-fold-8-and-flip-8-what-s-missing"><span>Samsung DeX on Fold 8 and Flip 8: What’s missing</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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gZddKBggf4kMVgd2r74df9" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/gZddKBggf4kMVgd2r74df9-1920-80.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>Apart from that, this version of Samsung DeX is no different from the past few iterations. For example, I like being able to run two apps side-by-side and automatically resize them by adjusting the slider between them. That way, I can make Chrome take up more of the desktop while leaving a smaller window for Slack.</p><p>However, there are still a few improvements that could elevate the experience. First and foremost, I’d love to see DeX copy <a href="https://www.tomsguide.com/computing/windows-operating-systems/5-windows-10-features-that-windows-11-does-way-better">Windows 11’s “Snap” feature</a>, which lets you arrange apps in preset layouts for better organization. While DeX still offers side-by-side multitasking, I want that extended to four apps at once — where each app occupies a quadrant of the display.</p><p>Secondly, I would love for Samsung to bring back support for multiple user profiles. Many of the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phones</a> offer this feature, but Samsung has left it out for several generations now. It’s a crucial addition because it would allow users to separate work and personal accounts cleanly. For example, I have bookmarks specifically tied to my work account that I can't access in DeX because Chrome is locked to my personal profile.</p><h2 class="article-body__section" id="section-samsung-dex-on-z-flip-8-z-fold-8-and-z-fold-8-ultra-bottom-line"><span>Samsung DeX on Z Flip 8, Z Fold 8, and Z Fold 8 Ultra: Bottom line</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:4768px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qy6NPJHf2JvQ5aboQNieDn" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/qy6NPJHf2JvQ5aboQNieDn-1920-80.jpg" mos="" align="middle" fullscreen="" width="4768" height="2682" 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 can’t deny that I rely on <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 on these new foldables when I’m in a pinch and forget my laptop</a>. In fact, I can accomplish nearly 90% of my daily workload using DeX alone — though that missing 10% could easily be bridged if Samsung adds the features I mentioned.</p><p>DeX is also invaluable to me because I can pair it with my <a href="https://www.tomsguide.com/computing/vr-ar/smart-glasses/xreal-one-pro-ar-glasses-review">Xreal smart glasses</a>, a wireless mouse, and a Bluetooth keyboard. It makes for the ultimate portable desktop experience, projecting the interface directly in front of me with optional semi-transparency so I can stay aware of my surroundings.</p><p>And considering Samsung’s ongoing developments in <a href="https://www.tomsguide.com/computing/smart-glasses/i-just-went-hands-on-with-the-new-samsung-smart-glasses-heres-why-id-pick-them-over-meta">wearable displays and smart glasses</a>, I’m genuinely excited to see where Samsung DeX goes next.</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/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">I’ve tested the Galaxy Z Fold 8 and it proves Apple really needs to solve this one thing</a></li><li><a href="https://www.tomsguide.com/ai/gemini-notebook-just-sold-me-on-foldables-heres-why-i-finally-get-the-hype">Gemini Notebook just sold me on foldables — here's why I finally get the hype</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-preorder-deals-heres-how-im-saving-up-to-usd1-200-on-samsungs-new-phones">Don't pay full price for your Galaxy Z Fold 8: this preorder deal knocks up to $1,200 off</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade</link>
                                                                            <description>
                            <![CDATA[ After testing the new Samsung DeX across the Galaxy Z Fold 8, Fold 8 Ultra, and Flip 8, it's one small step forward in replacing my laptop. Here's why. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">qjkCkm3wdLUarSLJAgnaS6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 06 Aug 2026 05:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung 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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung DeX on Galaxy Z Flip 8.]]></media:description>                                                            <media:text><![CDATA[Samsung DeX on Galaxy Z Flip 8.]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung DeX on Galaxy Z Flip 8.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung’s new foldable phones are almost here, and if you’re planning to get any of them, you should know about their most underrated feature in my opinion: <a href="https://www.tomsguide.com/us/samsung-dex,review-4383.html">Samsung DeX</a>. This year’s lineup consists of three new foldables — the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">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> — which all come with the latest version of Samsung’s desktop interface.</p><p>Just as before, you can easily access DeX by plugging them directly into a monitor, whether via USB-C, an HDMI port using a USB hub, or even wirelessly on a supported display or TV. I’ve been testing this new Samsung DeX for the past week, and it gains one specific feature that makes it more useful for productivity.</p><p>In fact, this new Samsung DeX is exactly like the one I tested on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-dex-quietly-gets-a-makeover-with-the-galaxy-s26-and-its-now-much-more-like-a-windows-pc">Galaxy S26 from earlier this year</a> — which inherited it from the now-discontinued <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-trifold-review">Galaxy Z TriFold</a>.</p><h2 class="article-body__section" id="section-samsung-dex-on-fold-8-and-flip-8-what-s-new"><span>Samsung DeX on Fold 8 and Flip 8: What's new</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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="myCzeL2Fx2qx6pwtusH3kA" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/myCzeL2Fx2qx6pwtusH3kA-1920-80.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 only new addition to this year’s Samsung DeX is the ability to create up to four workspaces. <strong>Each desktop can support up to five apps, which means I can run 20 different apps simultaneously.</strong></p><p>While I don’t need to actively use that many apps at once, having them organized makes a huge difference. For instance, I’ve set up one workspace strictly for work-related apps I frequently access — like Slack, Gmail, Chrome, Google Docs, and Messages. In another, I have my social networking apps, while a third is dedicated to editing apps I use consistently, such as CapCut, PhotoDirector, and PowerDirector.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/WjFVzPdrf9soNGKJisYh6o-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vkBfgjGzVoYbz3CtzTFLD-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RCpxo3oYw85TxcVJiNbLYn-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/72eYELvVWUVfzY6kWhdLHn-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>By clicking the icon with the three vertical lines in the lower-left corner of the interface, I can easily jump to the workspace I need — which functions very similarly to how Windows 11 handles multiple desktops. With access to more workspaces, I can keep my apps organized and stay much more productive.</p><h2 class="article-body__section" id="section-samsung-dex-on-fold-8-and-flip-8-what-s-missing"><span>Samsung DeX on Fold 8 and Flip 8: What’s missing</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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gZddKBggf4kMVgd2r74df9" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/gZddKBggf4kMVgd2r74df9-1920-80.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>Apart from that, this version of Samsung DeX is no different from the past few iterations. For example, I like being able to run two apps side-by-side and automatically resize them by adjusting the slider between them. That way, I can make Chrome take up more of the desktop while leaving a smaller window for Slack.</p><p>However, there are still a few improvements that could elevate the experience. First and foremost, I’d love to see DeX copy <a href="https://www.tomsguide.com/computing/windows-operating-systems/5-windows-10-features-that-windows-11-does-way-better">Windows 11’s “Snap” feature</a>, which lets you arrange apps in preset layouts for better organization. While DeX still offers side-by-side multitasking, I want that extended to four apps at once — where each app occupies a quadrant of the display.</p><p>Secondly, I would love for Samsung to bring back support for multiple user profiles. Many of the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phones</a> offer this feature, but Samsung has left it out for several generations now. It’s a crucial addition because it would allow users to separate work and personal accounts cleanly. For example, I have bookmarks specifically tied to my work account that I can't access in DeX because Chrome is locked to my personal profile.</p><h2 class="article-body__section" id="section-samsung-dex-on-z-flip-8-z-fold-8-and-z-fold-8-ultra-bottom-line"><span>Samsung DeX on Z Flip 8, Z Fold 8, and Z Fold 8 Ultra: Bottom line</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:4768px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qy6NPJHf2JvQ5aboQNieDn" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/qy6NPJHf2JvQ5aboQNieDn-1920-80.jpg" mos="" align="middle" fullscreen="" width="4768" height="2682" 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 can’t deny that I rely on <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 on these new foldables when I’m in a pinch and forget my laptop</a>. In fact, I can accomplish nearly 90% of my daily workload using DeX alone — though that missing 10% could easily be bridged if Samsung adds the features I mentioned.</p><p>DeX is also invaluable to me because I can pair it with my <a href="https://www.tomsguide.com/computing/vr-ar/smart-glasses/xreal-one-pro-ar-glasses-review">Xreal smart glasses</a>, a wireless mouse, and a Bluetooth keyboard. It makes for the ultimate portable desktop experience, projecting the interface directly in front of me with optional semi-transparency so I can stay aware of my surroundings.</p><p>And considering Samsung’s ongoing developments in <a href="https://www.tomsguide.com/computing/smart-glasses/i-just-went-hands-on-with-the-new-samsung-smart-glasses-heres-why-id-pick-them-over-meta">wearable displays and smart glasses</a>, I’m genuinely excited to see where Samsung DeX goes next.</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/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">I’ve tested the Galaxy Z Fold 8 and it proves Apple really needs to solve this one thing</a></li><li><a href="https://www.tomsguide.com/ai/gemini-notebook-just-sold-me-on-foldables-heres-why-i-finally-get-the-hype">Gemini Notebook just sold me on foldables — here's why I finally get the hype</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-preorder-deals-heres-how-im-saving-up-to-usd1-200-on-samsungs-new-phones">Don't pay full price for your Galaxy Z Fold 8: this preorder deal knocks up to $1,200 off</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>