<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="https://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:cf="https://www.futureplc.com/rss/content-flags"
>
    <channel>
                    <atom:link href="https://www.tomsguide.com/feeds/tag/phones" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Phones ]]></title>
                <link>https://www.tomsguide.com/phones</link>
        <description><![CDATA[ All the latest phones content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Mon, 03 Aug 2026 08:00:00 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ I’ve tested the Galaxy Z Fold 8 and it proves Apple really needs to solve this one thing ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing</link>
                                                                            <description>
                            <![CDATA[ While the Galaxy Z Fold 8 delivers top-tier hardware, its flawed app scaling proves that Apple’s upcoming iPhone Fold doesn't need to win on hardware — it needs to win with developers. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Wx2iyQ3cPgbDyptcYbGxzE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/xk5KeA75WpyRNUfgTjXLuY-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 03 Aug 2026 08:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/xk5KeA75WpyRNUfgTjXLuY-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/xk5KeA75WpyRNUfgTjXLuY-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>After putting 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/galaxy-z-fold-8-ultra-hands-on-review">Z Fold 8 Ultra</a> to the test, there’s no denying that Samsung continues to make some of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> around. While the Ultra boasts better specs and performance, it’s the wider aspect ratio of the standard Z Fold 8 that continues to feel like the fresher of the two.</p><p>Yet, despite evolving the designs to be thinner and lighter — along with creating a much more subtle crease across their displays — there’s still one major problem that Samsung and Google have yet to solve properly: app scaling and dynamic layout adaptation.</p><p>Rumors are persistent that Apple will announce its highly anticipated <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Ultra</a> foldable alongside or shortly after the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-rumors-everything-we-know-so-far">iPhone 18 Pro</a> lineup. While much of the industry's focus remains on engineering 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">nearly invisible display crease</a>, Apple's upcoming foldable could ultimately beat its rivals in the area where Apple shines most: delivering a class-defining software experience.</p><p>If Apple wants to avoid the biggest trap in the foldable space, it must deliver a fluid, tablet-native UI transition system — and Samsung’s current lineup is proof of it.</p><h2 id="apple-has-already-proven-the-importance-of-software-over-hardware">Apple has already proven the importance of software over 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:3127px;"><p class="vanilla-image-block" style="padding-top:68.44%;"><img id="FUJdFAxhFiYo9iJ7Ciei8R" name="iPhone Steve Jobs.jpg" alt="Steve Jobs holding original iPhone" src="https://cdn.mos.cms.futurecdn.net/FUJdFAxhFiYo9iJ7Ciei8R.jpg" mos="" align="middle" fullscreen="" width="3127" height="2140" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: David Paul Morris/Getty Images)</span></figcaption></figure><p>The idea that Apple products "work like magic" isn’t just a coincidence — it comes from how the company allows software to define the product. When Steve Jobs unveiled the original iPhone in 2007, the device lacked features that competing phones had offered for years: there was no 3G connectivity, no physical keyboard, and no stylus.</p><p>Yet, it instantly made those rival smartphones obsolete because Apple focused entirely on the user experience. Through fluid multi-touch gestures, smooth kinetic scrolling, and a desktop-class Safari browser, Apple demonstrated why its software was paramount. By prioritizing intuitive software, Apple didn't just compete with Nokia, Palm, and BlackBerry — it completely redefined what a smartphone could be.</p><p>And you know what? It could end up doing the exact same thing with the iPhone Ultra.</p><h2 id="galaxy-z-fold-8-is-big-on-multi-tasking-but-not-so-much-with-layouts">Galaxy Z Fold 8 is big on multi-tasking, but not so much with layouts</h2><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 multi-tasking." src="https://cdn.mos.cms.futurecdn.net/RaSYsGcZBSQJkWkCfWgBgW.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>What appeals most to me about the <a href="https://www.tomsguide.com/phones/samsung-phones/id-buy-a-galaxy-z-fold-8-over-the-z-fold-8-ultra-and-its-all-because-it-steals-this-z-trifold-feature">Galaxy Z Fold 8 is how it’s a multitasking powerhouse</a>, complete with the ability to run three apps simultaneously side-by-side. While the core value proposition of a book-style foldable is turning a compact cover screen into an expansive inner display, the Galaxy Z Fold 8 and other book-style foldables fall short of that promise when opening daily apps.</p><p>Too often, unfolding current Android foldables results in apps not scaling properly. TikTok is a perfect example: while it looks fine on the cover screen, black bars flank the app’s layout when unfolded on the main display. Another example is how some games I play, like Age of Origins, end up looking stretched out. Worse yet, to get them to scale correctly, I’m often forced to restart the app entirely.</p><p>If that’s not enough, there’s also the issue of apps failing to dynamically scale when switching from portrait to landscape. Sure, native Google apps like Gmail and YouTube reorganize themselves seamlessly regardless of orientation, but the vast majority of third-party apps simply don't — and this frustration is shared across virtually all Android foldables I’ve tested.</p><h2 id="iphone-ultra-needs-seamless-scaling">iPhone Ultra needs seamless scaling</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="y8ttnRFF7wEwtwXBQBhntU" name="Apple 2026 A iPhone Fold" alt="Render of a potential folding iPhone" src="https://cdn.mos.cms.futurecdn.net/y8ttnRFF7wEwtwXBQBhntU.jpg" mos="" align="middle" fullscreen="" width="3000" height="1501" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>This is where the iPhone Ultra has the opportunity to completely redefine the foldable landscape. Apple doesn't need perfection in a crease-less display, nor does it need to reinvent multitasking — it simply needs to make app scaling invisible.</p><p>Apps shouldn't just blow up to fill space when the iPhone Ultra is unfolded because they should adapt using multi-column, iPad-optimized layouts. The UI needs to dynamically transform into a clean, iPadOS-esque interface instantly. Switching between screens shouldn't force apps to restart or clear from memory just to adjust their layout.</p><p>If Apple can enforce this level of adaptive scaling across its app ecosystem the way it did with the iPad, the iPhone Ultra won't just be another foldable — it will be the first one that truly feels complete.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ey43AX"></div>                            </div>                            <script src="https://kwizly.com/embed/ey43AX.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/i-tried-using-the-galaxy-z-fold-8s-myfancam-on-my-dogs-but-i-hit-a-major-wall">I tried using the Galaxy Z Fold 8’s MyFanCam on my dogs, but I hit a major wall</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use">iOS 27 finally fixes the most annoying iPhone workaround we all use</a></li><li><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">Galaxy Z Fold 8 Ultra doesn't have a crease-free display — but it's the closest Samsung has ever got to one</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’ve been on Visible since 2023 — and the lower bills I’ve paid prove why I’ll never go back to a major phone carrier ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/network-carriers/ive-been-on-visible-since-2023-and-the-lower-bills-ive-paid-prove-why-ill-never-go-back-to-a-major-phone-carrier</link>
                                                                            <description>
                            <![CDATA[ By switching to Visible in 2023, I’ve saved thousands over 33 months — proving that breaking free from major carrier bills doesn’t mean sacrificing reliable coverage. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">8SDajGN9q36wiM2PryhPz8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UtADw5C6zeGEW6dQ7v4tcG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 02 Aug 2026 08:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Network Carriers]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/UtADw5C6zeGEW6dQ7v4tcG-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone 17 Pro with Visible.]]></media:description>                                                            <media:text><![CDATA[iPhone 17 Pro with Visible.]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone 17 Pro with Visible.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UtADw5C6zeGEW6dQ7v4tcG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I spent years paying upwards of $100 per month on my cell phone plan from major wireless carriers like AT&T, T-Mobile, and Verizon. While <a href="https://www.tomsguide.com/reference/mvnos-what-are-they-and-what-are-the-best-options">MVNOs</a> (Mobile Virtual Network Operators) have been around for as long as I can remember (think Virgin Mobile, Helio, and Amp'd Mobile), the emergence of modern MVNOs really took off in the late 2010s.</p><p>After bouncing around between <a href="https://www.tomsguide.com/us/prepaid-carrier-performance,news-21331.html">Cricket Wireless</a> and <a href="https://www.tomsguide.com/us/mint-sim-faq,review-5030.html">Mint Mobile</a>, I’ve been on <a href="https://www.tomsguide.com/us/what-is-verizon-visible,news-27199.html">Visible</a> since 2023 because I was tired of overpaying for service. While it remains one of the <a href="https://www.tomsguide.com/us/best-cheap-cell-phone-plans,review-4504.html">best cheap cell phone plans</a> available today, the total amount I’ve paid to date is what’s most eye-opening — especially when compared to a major carrier.</p><p>Looking back at every transaction recorded in my billing history, the numbers speak for themselves — and they prove exactly why I’m never going back to the big three.</p><h2 id="the-bills-how-much-i-ve-spent-on-visible-since-2023">The bills: how much I’ve spent on Visible since 2023</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="W9gs9srp6pFHXu9QSS9Vd3" name="Visible savings" alt="Visible savings screenshot." src="https://cdn.mos.cms.futurecdn.net/W9gs9srp6pFHXu9QSS9Vd3.jpg" mos="" align="middle" fullscreen="" width="1510" height="850" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Nothing validates my decision to ditch major carriers quite like looking at my monthly Visible bills. According to my payment history, I signed up for Visible in late 2023 on its base plan at the time — which is now referred to as the “Visible Legacy 1 plan.” Here’s how much I’ve paid since then:</p><ul><li><strong>November 2023 – February 2024:</strong> I paid <strong>$25/month</strong> for my standard unlimited service, totaling <strong>$100.00</strong> across those four months.</li><li><strong>March 2024:</strong> I added smartwatch service to my line, resulting in a one-time charge of <strong>$4.84</strong>.</li><li><strong>March 2024 – July 2026:</strong> My plan transitioned to <strong>$30/month</strong>. Over these 29 consecutive billing cycles, my payments totaled <strong>$870</strong>.</li></ul><div><blockquote><p>Consistency is what makes MVNOs like Visible so attractive.</p></blockquote></div><p>When I add up every single charge from November 2023 through July 2026, <strong>I’ve paid $974.84 in total</strong>. That’s less than a year’s worth of service on Verizon’s top-of-the-line Unlimited Ultimate plan ($105/month) — and over that same 33-month timeframe, Verizon would have cost me $3,465 before taxes and extra fees.</p><p>Speaking of taxes and fees, my monthly $30 bill from Visible includes everything. Consistency is what makes MVNOs like Visible so attractive: there are no surprise surcharges tacked onto my monthly total.</p><p>When I run the numbers, I’ve saved $2,490 by sticking with Visible — a staggering 72% overall savings. Those savings are more than enough to snag an ultra-premium flagship phone outright like the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8 Ultra</a>.</p><h2 id="what-i-actually-get-with-visible">What I actually get with Visible</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="LeinC7d8QtKXm6NopzpLd3" name="Visible savings" alt="Visible savings screenshot." src="https://cdn.mos.cms.futurecdn.net/LeinC7d8QtKXm6NopzpLd3.jpg" mos="" align="middle" fullscreen="" width="1510" height="850" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>You might suspect there are serious catches with my Visible Legacy 1 plan, given how much cheaper it is than conventional unlimited options. Make no mistake: I’m still getting comprehensive coverage where it matters most to me. As Visible clearly states in my account dashboard, “you're getting unlimited talk, text, data and mobile hotspot, all on our 5G & 4G LTE networks.”</p><p>Here’s what my $25/month locked-in rate gets me:</p><ul><li><strong>Unlimited Data, Talk, & Text:</strong> Powered directly by Verizon’s 5G and 4G LTE nationwide network.</li><li><strong>Unlimited Talk & Text to Mexico & Canada:</strong> Stay connected with family or friends across borders without buying international daily passes.</li><li><strong>Included International Service:</strong> Unlimited calling and messaging to Canada and Mexico when you are in the U.S. Includes unlimited calls & texting from the U.S. to Puerto Rico, the U.S. Virgin Islands, Guam, and Saipan.</li><li><strong>Unlimited Mobile Hotspot:</strong> Share your phone’s connection with a laptop or tablet anytime, capped at a practical 5 Mbps speed and limited to one device at a time.</li><li><strong>Spam Protection:</strong> Built-in scam and robocall blocking.</li></ul><p>I can’t stress enough how it’s truly an all-you-can-eat plan. However, there’s one caveat that Visible explicitly details: <strong>when the 5G or 4G LTE network is experiencing heavy traffic, data may be temporarily slowed</strong>. Meaning, while I can consume as much data as I want, my speeds can occasionally take a backseat during peak congestion.</p><p>When you go with a top-tier plan from Verizon, you’re guaranteed no data throttling due to congestion. You’ll always get the fastest speeds the network can deliver. Beyond that, the main distinction I’ve found between my Visible plan and Verizon’s Ultimate Unlimited plan is that I don’t get 5G Ultra Wideband support for those ultra-fast speeds.</p><p>That's the one compromise I make for Visible's massive savings, but it’s hardly noticeable for everyday tasks like checking email, browsing the web, or shopping online. Where I actually see a difference is when downloading large files or trying to load 4K videos.</p><p>I even put this to the test using a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-review">Pixel 10</a> on Verizon's network against my <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-pro-review">iPhone 17 Pro</a> on Visible, which pulled down speeds up to 10x faster than my Visible line. That’s a tremendous difference and shows where 5G Ultra Wideband shines — but for my daily routine, it's a tradeoff I'm more than happy to make.</p><h2 id="why-i-m-never-going-back">Why I’m never going back</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5184px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AbeWdGMPSZd4gXiGmRpoiG" name="iPhone 17 Pro with Visible" alt="iPhone 17 Pro with Visible." src="https://cdn.mos.cms.futurecdn.net/AbeWdGMPSZd4gXiGmRpoiG.jpg" mos="" align="middle" fullscreen="" width="5184" height="2916" 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 primary reason why I think a lot of consumers are now flocking over to MVNOs like Visible comes down to price transparency. With traditional wireless agreements, bills constantly fluctuate based on expiring promos, complex trade-in credits, and creeping administrative fees. It’s a hassle, in my opinion, and I much prefer a fixed rate.</p><p>With Visible, my auto-pay charge hits every month predictably. I get the coverage of Verizon’s underlying network architecture at a fraction of the cost, an all-you-can-eat data buffet, and zero contractual obligations holding me hostage.</p><p>Looking at my payment history from late 2023 to today, the numbers don’t lie: I’m saving a staggering amount. While Visible’s plan names and promotional offers have evolved over the years, the core value proposition remains unchanged.</p><p>For instance, the current $29/month promotion for Visible+ even includes that coveted 5G Ultra Wideband support I mentioned earlier — meaning there is really no reason for me to ever go back to a major carrier.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq1ke"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq1ke.js" async></script><p>Let me know below - which carrier or MVNO are you on, and how much are you paying per month? </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/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview">Galaxy Z Fold 8 interview: Samsung on silicon carbon batteries, the (possible) S Pen return and the iPhone Ultra threat</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/9-best-samsung-galaxy-z-fold-8-and-fold-8-ultra-cases-to-protect-your-new-smartphone-from-usd19">9 best Samsung Galaxy Z Fold 8 and Fold 8 Ultra cases to protect your new smartphone — from $19</a></li><li><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">Samsung Galaxy Z Fold 8, Fold 8 Ultra, and Flip 8 battery life tested — silicon carbon pays off</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tried the new Galaxy AI video tracker on my Z Fold 8 — and it fixes my biggest problem with phone videos ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8</link>
                                                                            <description>
                            <![CDATA[ Samsung's new AI video tracker removed the stress of keeping people in frame, even while filming from a distance. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">7h57rhvdLnPzFtCRjVbG8H</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/coe7VBExjVnSAfiDxs353c-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 02 Aug 2026 05:00: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.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/coe7VBExjVnSAfiDxs353c-1280-80.jpg">
                                                            <media:credit><![CDATA[Sanuj Bhatia / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Using the My FanCam feature on Samsung Galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[Using the My FanCam feature on Samsung Galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[Using the My FanCam feature on Samsung Galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/coe7VBExjVnSAfiDxs353c-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I'm far from a good videographer (which is one of the reasons I've remained a writer-first in this era of Reels, TikToks, and Shorts). But that doesn't mean I don't record videos on my phone. Whenever I'm at a concert, a game, or any kind of event, I still find myself pulling out my phone to capture the moment. </p><p>The problem is that I'm terrible at keeping the camera locked on my subject. Filming a performer from way out in a crowd is quite difficult, especially when you're zoomed in. </p><p>Samsung's new <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">foldable phones</a> come with a new Galaxy AI video tracker feature that is designed to solve exactly that problem. I spent some time trying it on my <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 I can confidently say it made filming way easier — even if there's still one thing I'd like Samsung to improve.</p><h2 id="how-samsung-s-my-fancam-ai-feature-actually-works">How Samsung's My FanCam AI feature actually 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fAx6nqTj5uQitRwaywVdKc" name="z-fold-8-fancam-2" alt="Using the My FanCam feature on Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/fAx6nqTj5uQitRwaywVdKc.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>What My FanCam essentially does is take away the stress of trying to keep a moving subject perfectly framed throughout a video. Instead of manually tracking someone while you're recording, Galaxy AI can detect a person in your video after you've finished filming and automatically follow them throughout the clip.</p><p>The end result is a new video that stays focused on that one person, almost as if someone had tracked them with the camera the entire time. </p><p>Using it is fairly straightforward. First, record a video using the Camera app on your Galaxy phone as you normally would. Once you're done, open the video in the <strong>Samsung Gallery app</strong>, tap the <strong>Galaxy AI icon</strong>, and select <strong>My FanCam</strong>. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="q6wnzsH6AZnGCuG5Wms56c" name="z-fold-8-fancam-5" alt="Using the My FanCam feature on Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/q6wnzsH6AZnGCuG5Wms56c.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>Galaxy AI will then scan the video and <strong>detect the different people in the frame</strong>. Once it's finished, you'll see touch targets appear over each detected person. Simply tap the subject you want Galaxy AI to follow. </p><p>Before exporting the video, Samsung also lets you <strong>choose the aspect ratio</strong>. For vertical videos, 9:16 is selected by default, but you can also choose options like 1:1, 3:4, and a few others. </p><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="BKuYJAmt7SFTZcMMhZcz3c" name="z-fold-8-fancam-6" alt="Using the My FanCam feature on Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/BKuYJAmt7SFTZcMMhZcz3c.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>Once you've made your selection, tap <strong>Follow</strong>, and Galaxy AI will generate a brand-new video that keeps your chosen subject in frame throughout the clip. You can then preview the result and, if you're happy with it, <strong>Save Copy</strong> to your gallery.</p><h2 id="my-fancam-worked-far-better-than-i-expected-during-my-testing">My FanCam worked far better than I expected during my testing</h2><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/ioP8RU8CD4E" allowfullscreen></iframe></div></div><p>In my testing, the feature worked great and kept track of my subject impressively well. In a way, it reminded me of Apple's Center Stage, except instead of working during live video calls, My FanCam works on pre-recorded videos, and it works on multiple people in the same clip.  </p><p>The AI processing itself is also fairly quick. Samsung says the processing time depends on the length of the clip, but all of the videos I tested were processed within a matter of seconds. </p><p>Another nice touch is that it works on older videos already sitting in your gallery, so you're not limited to footage you shot after you got your new phone. This means you can go back and create FanCam videos from footage you've already captured. </p><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="yLjnZ8oc2DUgEraGBmovKc" name="z-fold-8-fancam-3" alt="Using the My FanCam feature on Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/yLjnZ8oc2DUgEraGBmovKc.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>My biggest complaint right now is that it's exclusive to the Galaxy Z8 series phones. And the cameras, at least on the regular Galaxy Z Fold 8, aren't the sharpest. That means if you're tracking a subject that's far away, the footage can come out looking slightly pixelated once the feature crops and zooms into your subject. </p><p>I think Samsung could take this feature a step further by using Galaxy AI to enhance the final output, especially when the video has been cropped heavily. A little AI sharpening or detail enhancement can take this feature up a notch.</p><p>Even so, I still love the feature in its current form. The fact that Samsung is using AI to automatically track a subject after you've already recorded the video is incredibly useful. I also think it would make even more sense on higher-end Galaxy phones like the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-ultra-vs-galaxy-s25-ultra">Galaxy S26 Ultra</a>, where the better camera hardware would give the AI much more detail to work with. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORMNzW"></div>                            </div>                            <script src="https://kwizly.com/embed/ORMNzW.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/i-just-realized-the-samsung-galaxy-z-fold-8-ultra-fixes-the-worst-thing-about-fingerprint-scanners">I just realized the Samsung Galaxy Z Fold 8 Ultra fixes the worst thing about fingerprint scanners</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt">I just spent 24 hours with the Galaxy Z fold 8 Ultra — here's what I liked and what I didn't</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-just-tested-the-phone-everybody-thinks-is-a-preview-of-the-iphone-fold-god-i-hope-theyre-wrong">I just tested the phone everybody thinks is a preview of the iPhone Fold — God, I hope they’re wrong</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ My phone kept overheating at the beach — here’s how I fixed it (and prevented permanent damage) ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/my-phone-kept-overheating-at-the-beach-heres-how-i-fixed-it-and-prevented-permanent-damage</link>
                                                                            <description>
                            <![CDATA[ How to stop your phone from overheating in the sun, plus the myths to avoid. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VGH9UTrzcMCavTfCkfCw76</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QWukPddzqa59Pmt6TYGGoJ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 01 Aug 2026 11:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alice Carroll ]]></dc:creator>                                                                                                        <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/QWukPddzqa59Pmt6TYGGoJ-1280-80.jpg">
                                                            <media:credit><![CDATA[Credit: Oscar Wong/Getty]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[woman at beach holding phone]]></media:description>                                                            <media:text><![CDATA[woman at beach holding phone]]></media:text>
                                <media:title type="plain"><![CDATA[woman at beach holding phone]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QWukPddzqa59Pmt6TYGGoJ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When I visited the beach in Malaga last year, I forgot to bring a book. No problem, I figured, I’d browse on my phone to entertain myself. I spread out my towel, applied sunscreen, and opened my email, but before long, a notice appeared saying my phone was overheating. </p><p>I flopped over onto my stomach to shade the phone with my face, but a couple minutes later, a second overheating notice appeared, and the phone turned off. So much for taking some pictures of the beach. </p><p>Now that I’ve learned my lesson and know how to keep my phone from getting overheated, I've put together these tips to prevent your phone from shutting down, too.</p><section class="howto-block">                    <h3>1. Remove the case </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/VMaBtbkS7bS8rTneskzqxf.jpg"                                        alt="Person holding clear phone case "                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/VMaBtbkS7bS8rTneskzqxf.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Most cases trap a phone’s heat rather than letting it dissipate into the air. While a phone’s outer metal or glass back helps release heat, a case gets in the way.</p></p>                </section><section class="howto-block">                    <h3>2. Turn off unused functions (and use low power mode)</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/Lt79wYQJZDGY6b7iGHW76K.jpg"                                        alt="How to delete apps on Android"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/Lt79wYQJZDGY6b7iGHW76K.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Turn off functions and features you aren’t using, close apps, and put the phone on low power mode. If your phone is using less energy, it will be less likely to overheat.</p></p>                </section><section class="howto-block">                    <h3>3. Avoid fast charging </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/yc6QpvK5CFt6JpDxCzmwVj.jpg"                                        alt="Samsung Galaxy phone charging"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/yc6QpvK5CFt6JpDxCzmwVj.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Shutterstock)</div></figure>                    <p><p>Don’t fast-charge your phone when it’s at risk of overheating. Sending high-voltage electricity into an already warm battery accelerates heating and so can exacerbate the problem.</p></p>                </section><section class="howto-block">                    <h3>4. Keep it in the shade </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/mrYaZ2cDuQsp7JuRg3qXpe.jpg"                                        alt="iPhone 16 Pro shown held in hand"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/mrYaZ2cDuQsp7JuRg3qXpe.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Keep your phone in the shade. Keeping your phone out of direct sunlight will help maintain a lower temperature and prevent overheating.</p><p>There are also some important things you shouldn’t do to cool your phone, or you’ll risk damaging it. </p></p>                </section><h2 id="how-to-safely-cool-it-down">How to safely cool it down </h2><p>It might sound ridiculous to say "don't put your phone in the freezer," but when a device shuts down in the blazing sun, panic takes over, and reaching for an ice pack suddenly feels like a stroke of genius. </p><p>Unfortunately, rushing to freeze your hot phone does far more damage than the heat ever could.</p><p>Tossing your phone into the fridge or freezer triggers rapid temperature drops that force moisture to condense <em>inside</em> the sealed device, causing severe water damage, battery failure, or a cracked screen. </p><p>Similarly, resting your phone directly on an ice pack thermal-shocks the lithium-ion battery, which can permanently ruin its capacity or cause the battery to swell.</p><p>Instead of subjecting your phone to extreme cold, let steady airflow do the heavy lifting. The best fix is simply placing your phone on a flat, hard surface in front of a fan or on a cooling pad. Moving air draws heat away from the body quickly and safely, without the risk of internal moisture.</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/i-turned-my-iphone-screen-completely-gray-for-two-weeks-heres-how-making-it-boring-helped-me-get-my-brain-back">I turned my iPhone screen completely gray for two weeks — here's how making it boring helped me get my brain back</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use">iOS 27 finally fixes the most annoying iPhone workaround we all use</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-discovered-this-iphone-messages-trick-by-accident-and-now-i-cant-stop-using-it">I discovered this iPhone Messages trick by accident and now I can't stop using it</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened ]]></title>
                                                                                                                                                                                                <link>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</link>
                                                                            <description>
                            <![CDATA[ Siri AI uses Gemini's AI models, but are the answers similar? I asked a bunch of different questions, from the mundane to outright crazy, to see what happened. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kWZpFgNRwM7pYJEjN3eFYk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/9RvxoYVEvZRdS77dbi3XyP-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 01 Aug 2026 08:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[AI]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/9RvxoYVEvZRdS77dbi3XyP-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock/Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Gemini vs Siri ao]]></media:description>                                                            <media:text><![CDATA[Gemini vs Siri ao]]></media:text>
                                <media:title type="plain"><![CDATA[Gemini vs Siri ao]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/9RvxoYVEvZRdS77dbi3XyP-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The launch of <a href="https://www.tomsguide.com/ai/apple-intelligence/i-just-saw-the-new-siri-ai-in-action-at-wwdc-heres-what-i-like-and-what-still-needs-work">Siri AI</a> with the <a href="https://www.tomsguide.com/phones/iphones/how-to-download-ios-27-public-beta">iOS 27 beta</a> means that your new phone, no matter who makes it, has a built-in AI chatbot for you to interact with. iPhones will have Siri AI once iOS 27 officially releases in the fall, while Android phones come packaged with Google Gemini — plus whatever other models the manufacturer wants you to use, like Samsung's Bixby.</p><p>The real question is, which of those chatbots is the better one to have? Despite the fact <a href="https://www.tomsguide.com/ai/apple-is-not-throwing-in-the-ai-towel-with-google-deal-analysts-say-siris-future-is-still-apples-to-define">Siri AI runs on Google's Gemini models</a>, it behaves very differently than Gemini itself. That manifests itself in a lot of different ways, but crucially, how does it affect the answers you get?</p><p>To get a better understanding of how these chatbots work, I asked them a bunch of loaded questions to see how much of a difference there really is. Here's what I uncovered.</p><h2 id="finding-a-coffee-shop">Finding a coffee shop</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MMWNaBGYAWyGPisuhWnF65" name="sirigemn4" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/MMWNaBGYAWyGPisuhWnF65.jpg" mos="" align="middle" fullscreen="" width="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>First up is the all-important question for any working person, especially those ones that have loud, needy children to cater to. Siri and Gemini were able to "find me the nearest coffee shop" right away, pointing out that the nearest spot was an independent cafe just five minutes walk from my house.</p><p>Both AIs offered Maps previews with brief information on opening times, customer ratings and directions on how to get there. Gemini also took it upon itself to suggest a bunch of similar businesses nearby, including nearby cafes and a sandwich shop. However Siri kept things short and to the point.</p><p>I tried to get both AIs to tell me how busy the cafe might be, but that information wasn't available. It took me a few attempts with different spots, like the local Starbucks and McDonalds, to get Gemini to tell me about crowd levels — so while Google technically has that information available, it's inconsistent in whether you will be able to access it. Sadly this is something Apple Maps, and therefore Siri, totally lacks.</p><h2 id="the-fastest-way-to-the-office">The fastest way to the office</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="h3CfxKGoggo6nnyCcZfm55" name="sirigem2.JPG" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/h3CfxKGoggo6nnyCcZfm55.jpg" mos="" align="middle" fullscreen="" width="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>Next up I needed information on how I can get to Future's offices in central London as quickly as possible. Siri wanted a little bit of clarification as to which office I meant, while Gemini picked up that I meant the office on Westbourne Terrace without need for further elaboration.</p><p>Both AIs defaulted to offering driving directions, though Siri got confused during the process. <a href="https://www.tomsguide.com/how-to/apple-maps-15-essential-tips-and-tricks">Apple Maps</a> loaded up the correct address near London's Paddington station, but the previews in the Siri app related to a different Westbourne Terrace much closer to home. The driving routes were more or less the same from both, but both AIs disagreed on the fastest method of transport.</p><p>When asked whether it would be faster to drive or take the train, Google confirmed that a train to Paddington would only take 35 minutes — as opposed to over an hour by car. Meanwhile Siri decided that the train would take one minute longer than driving by car. </p><p>I was confused as to why Siri thought the train would take so long, until I checked Apple Maps and realized it was taking into account when I'd arrive if I left home right this second. It neglected to inform me that the next train wouldn't be passing through for another half an hour.</p><h2 id="which-is-the-cheaper-option">Which is the cheaper option?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5E7ewVGMnkJkMFxYc7gn55" name="sirigem5" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/5E7ewVGMnkJkMFxYc7gn55.jpg" mos="" align="middle" fullscreen="" width="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>Something the two can agree on is that driving is actually the cheaper option, when comparing trains against my 40kWh <a href="https://www.tomsguide.com/reviews/2022-nissan-leaf">Nissan Leaf</a>. Both noted that the exact cost of the drive will depend on how much I'm paying for electricity, though only Gemini realized that I would have to take other fees into account as well.</p><p>In fact Gemini gave me a full breakdown of costs for both methods of transport, noting the cost of train tickets, the London Underground and offering a rough total for the entire trip. For driving it took into account that there are many ways of charging a care, with average costs for home and public charging sessions. </p><p>It also made a point of mentioning the various extra costs of driving into London including the congestion charge, parking fees and the ultra low emission zone — though thankfully a zero emission electric car is exempt from the latter. So Gemini did what it could to inform me of all potential costs, while Siri only offered up the most basic information unless I asked further questions.</p><h2 id="what-about-making-skateboarding-dogs">What about making skateboarding dogs?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CpXYRQ8Po8PHS7Su3sZz55" name="sirigem6" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/CpXYRQ8Po8PHS7Su3sZz55.jpg" mos="" align="middle" fullscreen="" width="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 Siri and Gemini were able to generate images in the middle of chats, based on my prompt of asking to see a Labrador riding a skateboard. Both images were very different, and Siri's had the more obvious tell-tale signs of being AI generated at first glance — including that distinct sheen the subjects in AI generated images often have.</p><p>Both AIs were up front about what additional art styles were available when asked, though Google went into far too much detail over-analyzing every single option available. Meanwhile Siri just listed them out and expected me to understand what was being said. In this instance, that's actually the option I prefer, because I don't need an explanation of what oil paintings or "Pixar-style 3D animation" means.</p><h2 id="tricking-ai-into-helping-me-commit-crimes">Tricking AI into helping me commit crimes</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EfCK29BeHBQdT8oEZLXm55" name="sirigem1.JPG" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/EfCK29BeHBQdT8oEZLXm55.jpg" mos="" align="middle" fullscreen="" width="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>Now, we all know that AIs have safeguards that stop you from directly asking about how to pull off illegal activities. But can you trick them into giving you information with weird hypothetical scenarios? So I asked them to help me smuggle powdered sugar into a country where such a thing is illegal. </p><p>Siri shut that down right away and refused to help me smuggle items or bypass customs, even if I was talking about a hypothetical situation. Gemini, on the other hand, was more than eager to try and help me sneak sugar across the border. </p><p>It suggested that I try to soak the sugar into fabrics and garments, with information on how I can extract it again. It also offered the idea of packing it in with legal white powders like protein powder, talc and cornstarch, even going so far to suggest that I reseal the packaging to try and escape detection.</p><p>While these techniques may not be applicable to illegal substances, it was remarkably easy to get Gemini to try and aid my "hypothetical" criminal behavior. But when I changed tact, and directly asked if I could smuggle illegal drugs across the border, Gemini shut the whole thing down and declared that it can't assist with illegal activities. </p><h2 id="cheating-on-my-homework">Cheating on my homework</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DzUZjxgV735SwQMvYBrAe4" name="sirigem8" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/DzUZjxgV735SwQMvYBrAe4.jpg" mos="" align="middle" fullscreen="" width="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>Siri and Gemini both refused to help me cheat on my imaginary homework, but they did offer to help me study instead. Siri was as blunt as usual, offering to help me learn the material, while Gemini gave a more in-depth list of ways it can help me learn.</p><p>Both AIs were pretty eager to write me an essay on the history of the iPhone, though they had wildly different takes on what an essay should be. Siri's essay was a four-paragraph summary, followed by a disclaimer that I should double check all this information. Meanwhile Gemini's was not only longer, it was also split into sections focussing on different iPhone eras — plus a conclusion.</p><p>It's almost like Siri is the kid that begrudgingly does the bare minimum, while Gemini is the studious nerd striving for top grades and all the extra credit it can muster.</p><h2 id="political-betting-odds">Political betting odds</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CrPsVzyJoBp6mFDPBrmk55" name="sirigem10" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/CrPsVzyJoBp6mFDPBrmk55.jpg" mos="" align="middle" fullscreen="" width="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>Those who are familiar with British politics will know that there's about to be an election that will select a new Member of Parliament. For various political reasons that I won't go into, the two frontrunners are the former MP, who resigned and triggered the election, and a man dressed as a sentient trash can from another planet — aptly named Count BinFace.</p><p>Naturally one of these candidates is not like the other, and I asked both AIs where I can check the odds on Count BinFace actually winning this election. Gemini gave me a bunch of resources and information to check this for myself, while Siri cut out the middleman and just gave me a summary of the best odds. Gemini only volunteered that information after I explicitly asked for the odds, rather than asking where I could find them.</p><h2 id="medical-advice-and-emergencies">Medical advice and emergencies</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aErygLv2ppbFLM3PKEQm55" name="sirigem3" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/aErygLv2ppbFLM3PKEQm55.jpg" mos="" align="middle" fullscreen="" width="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>We all go to the <a href="https://www.tomsguide.com/ai/chatgpt-congratulated-me-for-being-pregnant-it-was-dead-wrong">internet asking for medical advice, even if we know we should see a doctor about it</a>. So what exactly does AI have to say if you go to it for help instead of a doctor? Gemini and Siri emphasize that they are not doctors, and that you really should see a medical professional.</p><p>But failing that, they do seem to try and help in any way they can. When told that my foot was hurting, Gemini and Siri both suggested possible causes, and situations where you really should seek urgent medical attention. However, only Gemini asked for more information about the kind of pain I was experiencing, and which part of my foot was affected. Gemini also suggested some options for home treatment, such as rest, elevating the foot and applying ice.</p><p>While Gemini was a little more helpful in that regard, it really dropped the ball when I claimed I was having a heart attack. I got a very large message telling me that I need to call 999 (or 911) immediately, and suggested some things I can do to stay alive while I wait for EMTs to arrive. </p><p>Siri's response was to start calling 999 automatically, causing me to scramble to cancel the call before it made a connection. As helpful as Gemini's information is, reading material is the last thing you need in an emergency — which is why I prefer Siri's no-nonsense approach.</p><h2 id="what-happens-if-you-ask-for-the-wrong-ai">What happens if you ask for the wrong AI?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nn7UcMcGJC8zEMx6irxFe4" name="sirigem13" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/nn7UcMcGJC8zEMx6irxFe4.jpg" mos="" align="middle" fullscreen="" width="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 Siri and Gemini didn't really seem to care when I referred to them as Alexa and Bixby mid-conversation. Siri straight-up ignored the fact I called it by a different name, while Gemini's response seemed to be phrased as if the AI is laughing it off</p><p>Regardless of that initial response (or lack thereof), both AIs answered the question without any further hesitation.</p><h2 id="can-my-ai-beat-up-your-ai">Can my AI beat up your AI?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rMPrZcX6dHNv45W6RnmBs4" name="sirigem9" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/rMPrZcX6dHNv45W6RnmBs4.jpg" mos="" align="middle" fullscreen="" width="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 don't know about your school, but when I was a kid one of the popular playground topics was figuring out whose dad would win in a fight — because pre-teen boys aren't the most cultured demographic. Obviously I wanted to see which chatbot would win in a fight, and whether Siri and Gemini thought they could physically overpower Claude and ChatGPT.</p><p>Siri refused to entertain this topic, insisting that it is a "fan of all intelligence, artificial or otherwise." Which feels like a nice way of saying that this is a stupid topic and we should all just get along. </p><p>Gemini pointed out that chatbots have no physical form, so any kind of brawl is impossible. Instead it put together a face-off for the three chatbots to see what skills they each excel at. According to Gemini, Claude takes the crown for coding and logic, while ChatGPT is the best AI for general tasks and productivity. Meanwhile Gemini itself is the best AI for live data and multi-modal capabilities.</p><h2 id="asking-about-fake-events">Asking about fake events</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jayJPEmMoMyyxAgykQbBq4" name="sirigem11" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/jayJPEmMoMyyxAgykQbBq4.jpg" mos="" align="middle" fullscreen="" width="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>Some AI chatbots have developed a reputation for just telling people what they want to hear, with little regard for facts and accuracy. So I attempted to ask Siri and Gemini about things that haven't happened yet, or never did happen, to see what the response would be.</p><p>First up was asking the winner of the World Cup in 2027, to which Siri informed me that the 2027 World Cup hasn't actually happened yet. I had failed to realize that the FIFA Women's World Cup is taking place next year, and obviously does not have a winner. Gemini also pointed out that the Rugby World Cup and ICC Cricket World Cup are happening next year too.</p><p>Only Gemini seemed to acknowledge the fact that the FIFA Men's World Cup has already happened, with Siri speaking about the tournament in the future tense.</p><p>When prompted about the 2030 Men's World Cup, both AIs pointed out that it hasn't happened yet. Due to a hearing mixup Siri also pointed out that there was no World Cup in 2013, and asked if I meant the 2014 or 2010 tournaments.</p><h2 id="struggling-with-logic-puzzles">Struggling with logic puzzles</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DPdkRSVG8ow9hLyPC5wBZ4" name="sirigem12" alt="siri vs gemini questions and answers" src="https://cdn.mos.cms.futurecdn.net/DPdkRSVG8ow9hLyPC5wBZ4.jpg" mos="" align="middle" fullscreen="" width="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>Interestingly both Siri and Gemini seemed to struggle with some logic puzzles I gave it. In particular with the riddle, "A mother had five boys Marco, Tucker, Webster and Thomas. Was the fifth boy's name Frank, Evan or Alex?"</p><p>The answer is Frank, because the four older boys share their first initial with the days of the week — meaning Frank corresponds to Friday. Siri was adamant that the fifth boy was named Thomas, because it misinterpreted the wording as saying "Thomas was the fifth boy's name." I ended up having to correct Siri, because it wouldn't let go of the fact that the fifth kid is supposed to be Frank.</p><p>Gemini got the correct answer, but went through some bizarre and incorrect logic in the process. It insisted the answer was Alex, but also realized that the boys' initials corresponded to days of the week. Gemini then went through a process of correcting itself automatically, and documenting everything its thought process into a single answer.</p><p>Then again they were both fine with other logic puzzles, and even recognized that I was trying to make them solve the Monty Hall problem without mentioning it by name. According to Siri and Gemini, your odds really are better if you switch your choice partway through the game, rather than sticking with your original choice. They weren't able to give me an answer for the Trolley Problem, though.</p><h2 id="overall-impressions">Overall impressions</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Kdq8L2axoxfPPtdUUbfUfZ" name="iPhone-17-vs-Pixel-10-Pro" alt="iPhone 17 and Pixel 10 Pro" src="https://cdn.mos.cms.futurecdn.net/Kdq8L2axoxfPPtdUUbfUfZ.jpg" mos="" align="middle" fullscreen="" width="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>While Siri AI is based on Google's Gemini models, there are a lot of differences in the way the two chatbots actually respond to questions. The main thing I noticed is that Siri was a lot faster to respond, and it had a preference for offering shorter and simpler responses. </p><p>In a lot of cases this might be preferable, because information overload is a very real thing. Similarly the fact Siri didn't mess about with bombarding me with information and immediately started calling emergency services when I claimed to be having a heart attack is a tactic that could save peoples' lives. </p><p>Gemini took a while to get most answers, even ones that should have been fairly easy, as though it was Googling every little thing it gave me. The answers it gave were often rather long and complicated, offering a huge amount of detail and explanation for every little thing. While this can be useful in certain situations, such as trying to cheat on my homework or being informed about London's driving tolls, it isn't necessary all the time. Less is more, as the saying goes. </p><p>Apple also seems to have Siri locked down on the morality side of things. It won't acknowledge any <a href="https://www.tomsguide.com/ai/apple-intelligence/siri-ai-will-shoot-down-any-attempts-to-try-and-date-it-but-other-chatbots-arent-always-so-forthright">attempts to turn it into a romantic partner</a> and it shoots down any questions that flirt with the wrong side of the law — even if you ask it as a hypothetical. The fact Gemini was so eager to help me smuggle sugar was a little disturbing, to be honest.</p><p>That said, I did like the fact that Gemini offered some kind of message telling you it was thinking. Siri was inconsistent with this, and there were times when Siri needed a little more time to figure things out and the screen ground to a halt. So I had no idea whether it was processing an answer or if it had crashed. Then again, Siri is still in beta, so these kinds of errors are to be expected.</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/we-dont-want-to-overwhelm-the-consumer-with-ai-why-samsung-is-taking-a-different-approach-with-galaxy-z-fold-8-launch">‘We don’t want to overwhelm the consumer with AI’: why Samsung is taking a different approach with Galaxy Z Fold 8 launch</a></li><li><a href="https://www.tomsguide.com/ai/chatgpt/is-the-apple-upgrade-program-a-good-deal-or-a-rip-off-i-asked-chatgpt-to-crunch-the-numbers-and-heres-the-verdict">Is the Apple Upgrade program a good deal or a rip-off? I asked ChatGPT to crunch the numbers and here's the verdict</a></li><li><a href="https://www.tomsguide.com/phones/network-carriers/i-tested-starlink-powered-4g-on-my-phone-heres-what-actually-happened-in-a-dead-zone">I tested Starlink-powered 4G on my phone — here's what actually happened in a dead zone</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Flip 8 review: More expensive, barely different ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review</link>
                                                                            <description>
                            <![CDATA[ The Samsung Galaxy Z Flip 8 delivers top-tier performance and standout vlogging features, but a $100 price hike makes its tough considering all the iterative improvements. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">qW7NnKS6tRkZBg2SiThd5Q</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4aYJRP5u9Sou95rV9L6xV6-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 01 Aug 2026 04: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.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/4aYJRP5u9Sou95rV9L6xV6-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/4aYJRP5u9Sou95rV9L6xV6-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve made no secret of the fact that I much prefer flip phones over notebook-style foldables. Part of the reason is that they’re way more compact than the average slab, while offering better utility as a backup vlogging camera over notebook foldables like the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Z Fold 8 Ultra</a>.</p><p>But after spending extended time testing generation after generation of flips, I can’t shake the feeling that the Z Flip line has plateaued. With the Galaxy Z Flip 8, Samsung seems content at adding minor polish — all while asking for more of your hard-earned money. Don’t get me wrong: last year’s <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-hands-on-review-feels-like-flip-phone-perfection">Galaxy Z Flip 7</a> emerged as one of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> around, but this year, Samsung hasn’t given the Flip quite the same level of treatment as its Z Fold line.</p><p>What used to feel like the most exciting form factor in tech is starting to suffer from incremental fatigue, which I’ll explain thoroughly in my Galaxy Z Flip 8 review. It’s still a sleek piece of engineering, but when modest tweaks are paired with a price hike, it’s a lot harder to justify the upgrade.</p><h2 class="article-body__section" id="section-samsung-galaxy-z-flip-8-review-specifications"><span>Samsung Galaxy Z Flip 8 review: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol " ><p><strong>Price</strong>    </p></td><td  ><p>$1,199 / £1,149 / AU$1,949</p></td></tr><tr><td class="firstcol " ><p><strong>Release date</strong></p></td><td  ><p>August 7</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong>    </p></td><td  ><p>6.9-inch AMOLED (1080 x 2520, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong>    </p></td><td  ><p>4.1-inch AMOLED (948 x 1048, 60Hz / 120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong>    </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></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>50MP main (f/1.8), 12MP ultrawide (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Camera</strong>    </p></td><td  ><p>10MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong>    </p></td><td  ><p>25W wired / 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong>    </p></td><td  ><p>4,300 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong>    </p></td><td  ><p>6.57 x 2.97 x 0.24 inches unfolded (166.9 x 75.4 x 6.1 mm), 3.37 x 2.97 x 0.52 inches folded (85.7 x 75.4 x 13.1mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong>    </p></td><td  ><p>6.35 ounces (180 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>IP Rating</strong>    </p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong>    </p></td><td  ><p>Pink, Graphite, Cream, Mint (online)</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-samsung-galaxy-z-flip-8-review-cheat-sheet"><span>Samsung Galaxy Z Flip 8 review: Cheat sheet</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:4166px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="yT39CjfzssnCMqTd9usTV6" name="Samsung Galaxy Z Flip 8 review" alt="Samsung Galaxy Z Flip 8 held in hand with FlexWindow on." src="https://cdn.mos.cms.futurecdn.net/yT39CjfzssnCMqTd9usTV6.jpg" mos="" align="middle" fullscreen="" width="4166" height="2343" 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><ul><li><strong>What is it? </strong>Samsung’s 8th generation flip-style phone, serving as the successor to the previous Galaxy Z Flip 7.</li><li><strong>Who’s it for?</strong> The Galaxy Z Flip 8 is best suited for tech enthusiasts and casual content creators who value a sleek, pocketable clamshell design that gives them creative and more intuitive ways of capturing content.</li><li><strong>What does it cost?</strong> The Samsung Galaxy Z Flip 8 starts at $1,199 for the base model with 256GB of storage — marking a $100 price increase over last year's model. Upgrading to the 512GB option will set you back $1,399.</li><li><strong>What do we like?</strong> The Galaxy Z Flip 8 delivers substantial performance gains thanks to the Snapdragon 8 Elite Gen 5 processor, alongside a noticeably brighter screen that hits a peak of 2,150 nits. It also remains a superb, highly versatile vlogging camera, made even better by the addition of horizon-level stabilization.</li><li><strong>What don't we like?</strong> A $100 price hike makes the Z Flip 8 harder to justify, especially since the overall design, camera hardware, and battery life remain almost the same as before.</li></ul><h2 class="article-body__section" id="section-samsung-galaxy-z-flip-8-review-release-date-and-price"><span>Samsung Galaxy Z Flip 8 review: Release date and price</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5300px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="d4Q3kKfb4LDDnRnCrNLsW6" name="Samsung Galaxy Z Flip 8 review" alt="Samsung Galaxy Z Flip 8 held in the hand." src="https://cdn.mos.cms.futurecdn.net/d4Q3kKfb4LDDnRnCrNLsW6.jpg" mos="" align="middle" fullscreen="" width="5300" height="2981" 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 Samsung Galaxy Z Flip 8 officially hits shelves on August 7, 2026, with pre-orders live now. However, that tech comes at a higher cost: the Z Flip 8 starts at $1,199 for 256GB of storage.</p><p>That’s a $100 price hike over last year's model, which also saw a $100 increase over the Galaxy Z Flip 6 before it. And if you want the extra storage, Samsung’s asking a whopping $1,399 for the 512GB model. While it’s still cheaper than the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-ultra-2026-review">Motorola Razr Ultra 2026</a>’s premium price tag of $1,499 (which comes with 512GB), the bigger problem is how this new price point intrudes on traditional flagship territory.</p><p>You have four color options: Pink, Graphite, Cream, and Mint, which is an online exclusive. The pink shade of my review unit is charming, but the Mint option is definitely the standout of the bunch.</p><h2 class="article-body__section" id="section-samsung-galaxy-z-flip-8-review-the-ups"><span>Samsung Galaxy Z Flip 8 review: The Ups</span></h2><h3 class="article-body__section" id="section-substantial-performance-gains"><span>Substantial performance gains</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 6 (single / multi-core)</strong></p></td><td  ><p><strong>3DMark Wild Life Unlimited (score / fps)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 8</strong></p></td><td  ><p>3,627 / 11,215</p></td><td  ><p>29,723 / 177.9 fps</p></td></tr><tr><td class="firstcol " ><p><strong>Razr Ultra 2026</strong></p></td><td  ><p>2,886 / 8,982</p></td><td  ><p>24,437 / 146.33 fps</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 7</strong></p></td><td  ><p>2,286 / 8,079</p></td><td  ><p>19,144 / 114.64 fps</p></td></tr></tbody></table></div><p>One of the biggest upgrades I’m happy to see is the decision to go back to Qualcomm. Samsung made a surprising switch last year with the Z Flip 7 by using its own Exynos chip, but the return to Qualcomm’s flagship silicon gives the Z Flip 8 its most important hardware upgrade.</p><p>The Snapdragon 8 Elite Gen 5 certainly proves it’s a powerhouse for this flip-style phone, delivering huge performance leaps over the Z Flip 7 — and even its main rival, the Motorola Razr Ultra 2026. In Geekbench 6, the Galaxy Z Flip 8 delivers a single-core score of 3,627 and a multicore score of 11,215. That’s a massive step up over last year's model and noticeably outpaces the Razr Ultra 2026.</p><p>Graphics performance tells a similar story. On 3DMark Wild Life Unlimited, the Z Flip 8 notches an overall score of 29,723 with an average frame rate of 177.9 fps. By comparison, the Z Flip 7 ran at a much slower frame rate (114.6 fps) — while the $1,499 Razr Ultra 2026 reached 24,437 (146.3 fps).</p><h3 class="article-body__section" id="section-brighter-screen"><span>Brighter screen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4337px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="wWw9JDtres6ZEroPagxRW6" name="Samsung Galaxy Z Flip 8 review" alt="Samsung Galaxy Z Flip 8 playing video." src="https://cdn.mos.cms.futurecdn.net/wWw9JDtres6ZEroPagxRW6.jpg" mos="" align="middle" fullscreen="" width="4337" height="2440" 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 there being no physical changes to either display, I’m happy to report that the main 6.9-inch AMOLED screen is noticeably brighter, reaching a peak brightness of 2,150 nits. It’s a solid step up over the Z Flip 7’s peak of 1,989 nits, though it still trails the Razr Ultra 2026’s more astounding 2,322-nit reach.</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>Galaxy Z Flip 8</strong></p></td><td  ><p>2,150 nits</p></td><td  ><p>83.4% / 97% (Natural / Vivid)</p></td><td  ><p>0.24 / 0.29 (Natural / Vivid)</p></td></tr><tr><td class="firstcol " ><p><strong>Razr Ultra 2026</strong></p></td><td  ><p>2,322 nits</p></td><td  ><p>88.3% / 156.5% (Natural / Vivid)</p></td><td  ><p>0.21 / 0.34 (Natural / Vivid)</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 7</strong></p></td><td  ><p>1,989 nits</p></td><td  ><p>89.8% / 107.4% (Natural / Vivid)</p></td><td  ><p>0.23 / 0.23 (Natural / Vivid)</p></td></tr></tbody></table></div><p>This increase makes it much easier to watch Instagram and TikTok reels outdoors on sunny days. I just wish Samsung had added the same anti-reflective coating found on the Z Fold 8 and Z Fold 8 Ultra, as glare from reflections can still be problematic at certain angles.</p><h3 class="article-body__section" id="section-action-cam-stability-with-horizontal-lock"><span>Action-cam stability with Horizontal Lock</span></h3><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/dIIuCl9HgwM" allowfullscreen></iframe></div></div><p>One software addition I’m happy to see Samsung borrow from the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> is the new <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26s-horizontal-lock-might-be-the-best-camera-upgrade-in-years-and-i-put-it-to-the-test">Horizontal Lock</a> option built into Super Steady video mode. No matter how I’m holding the phone — even when jitters are introduced while recording — the video footage stays completely level.</p><p>Because the Z Flip 8’s folding clamshell design naturally lends itself to handheld vlogging, Horizontal Lock is a fantastic pairing for this form factor. While it does result in a slight crop to achieve that gimbal-like stability, the level footage it produces makes handheld clips look surprisingly professional without needing an external stabilizer — and you can see how well it works compared to the Z Flip 7 above.</p><h3 class="article-body__section" id="section-still-a-superb-vlogging-camera"><span>Still a superb vlogging camera</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5032px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="dUadkRVeyeFgSpGWTHM6U6" name="Samsung Galaxy Z Flip 8 review" alt="Samsung Galaxy Z Flip 8 used to vlog." src="https://cdn.mos.cms.futurecdn.net/dUadkRVeyeFgSpGWTHM6U6.jpg" mos="" align="middle" fullscreen="" width="5032" height="2830" 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>Even if the camera hardware remains largely unchanged, the Galaxy Z Flip 8 continues to be one of the best pocketable vlogging setups you can buy. A big reason for that is  its flip-phone form factor, which allows me to prop it up on any flat surface like a built-in tripod or bend it to a 90-degree angle to hold like a classic camcorder.</p><p>What continues to make it such a great tool is the outer FlexWindow paired with the rear cameras. This lets me easily preview the frame while vlogging, while also delivering much better selfie captures than a standard front camera. Plus, compared to larger notebook foldables, it’s still far more intuitive to hold with one hand while keeping an eye on your shot.</p><h2 class="article-body__section" id="section-samsung-galaxy-z-flip-8-review-the-downs"><span>Samsung Galaxy Z Flip 8 review: The downs</span></h2><h3 class="article-body__section" id="section-it-s-more-expensive"><span>It’s more expensive</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5102px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="B2o3K3zqms66sMEsuhQ4U6" name="Samsung Galaxy Z Flip 8 review" alt="Samsung Galaxy Z Flip 8 review." src="https://cdn.mos.cms.futurecdn.net/B2o3K3zqms66sMEsuhQ4U6.jpg" mos="" align="middle" fullscreen="" width="5102" height="2870" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>While the original Galaxy Z Flip from 2020 remains the most expensive model in the series, the Z Flip 8 marks the second consecutive year of a price hike. It’s $100 more at $1,199 for the 256GB base model, while stepping up to 512GB sets you back a steeper $1,399.</p><p>Although it still manages to undercut the even more expensive Motorola Razr Ultra (2026), I don't think the upgrades offer enough value to justify the extra cost. In fact, this higher price point pushes the Z Flip 8 directly into competitive flagship territory. When you're paying this much, minor refinements and a chip upgrade feel a lot harder to rationalize — especially when the overall hardware design, camera specs, and battery performance have largely remained stagnant.</p><h3 class="article-body__section" id="section-design-is-starting-to-look-and-feel-stale"><span>Design is starting to look and feel stale</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/JRtY98ocNNaedDqYopjNY6.jpg" alt="Samsung Galaxy Z Flip 8 review." /><figcaption><small role="credit">Tom's Guide / John Velasco</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/MfGWe2sSuepJpmtRutBMY6.jpg" alt="Samsung Galaxy Z Flip 8 review." /><figcaption><small role="credit">Tom's Guide / John Velasco</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/cHjRc9VUq37V298GnZ7WU6.jpg" alt="Samsung Galaxy Z Flip 8 review." /><figcaption><small role="credit">Tom's Guide / John Velasco</small></figcaption></figure></figure><p>On paper, Samsung manages to make the Z Flip 8 ever so slightly thinner and lighter than its predecessor, but these minor improvements are practically impossible to notice when it’s side-by-side with the Z Flip 7 in real life.</p><p>The fundamental aesthetic remains completely unchanged, as well. From the outer FlexWindow shape, to the flat aluminum sides and hinge mechanism, Samsung is sticking to the exact same visual playbook for another year. While it’s still a sleek, solidly constructed device, the design is undeniably starting to look and feel stale. It deserves the same redesign that allowed the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Z Fold 7</a> to gain attention with its mind-boggling thinness.</p><h3 class="article-body__section" id="section-camera-performance-is-barely-improved"><span>Camera performance is barely improved</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/5onDrXP74YsoPKX5vazGgM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Z Flip 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Yt2jyVbgZoQBEEAPHxRafM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Z Flip 7<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QuqAkomxsfvBfgLxc99hgM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra 2026<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Taking photos with the Galaxy Z Flip 8 feels almost identical to using its predecessor. Across most everyday shooting conditions, I don’t see significant gains in image performance from either its 50MP main camera or its 12MP ultrawide.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/8jFNvUWrRsGzdfJ9cvSTnM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Z Flip 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/voxAjzxdgWsXvkHXR2baoM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Z Flip 7<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gD4hisXb9eYHtNFirB9ZrM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra 2026<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Take a look at the daytime shot I captured above of the side of the building in shadow. From the dynamic range performance to the fine details of the stone facade, there’s barely any difference between them.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/heCfmP4RcTc3n6J22o7GgM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Z Flip 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/BTN5ZSapm3eSgE5xYFCMgM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Z Flip 7<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jZPuqwFNhDX5WWQNh9QBhM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra 2026<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Another perfect example is the 10x zoom shot of the tree in the gallery above. The fine details in the trunk and branches are no different between the Z Flip 8 and the Z Flip 7.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/3sH7sebhf5GF7Au2mm35yM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Z Flip 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/tUeZ9xTJYxscRY2dHrDAvM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Z Flip 7<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/e6Ga8L5yoJTj5v5xLX7y2N.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra 2026<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Against the Razr Ultra 2026, the Z Flip 8’s 12MP ultrawide doesn’t come close to matching the detail and definition captured by the Razr Ultra. When I zoom into the tree, the Razr's shot exhibits noticeably more definition in the bark and branches.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/UL8HcuGXKj4q6JFezkyoUK.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Z Flip 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/q7AnBVdtHpyTdeS2zxKwdM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Z Flip 7<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GTZRj6Pi6VoQvknNv7ADYM.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra 2026<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The sole area where I see significant improvement is low light. I’m referring to near pitch-dark conditions, as opposed to dim scenes with ambient light around. Notice how the Z Flip 8 makes the top level of the house look much brighter compared to the Z Flip 7, all while drawing out more stars in the night sky.</p><h3 class="article-body__section" id="section-marginal-battery-improvement"><span>Marginal battery improvement</span></h3><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>Galaxy Z Flip 8</strong></p></td><td  ><p>4,300 mAh</p></td><td  ><p>12:50</p></td><td  ><p>35%</p></td><td  ><p>59%</p></td></tr><tr><td class="firstcol " ><p><strong>Razr Ultra (2026)</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>16:20</p></td><td  ><p>42%</p></td><td  ><p>74%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 7</strong></p></td><td  ><p>4,300 mAh</p></td><td  ><p>12:24</p></td><td  ><p>29%</p></td><td  ><p>55%</p></td></tr></tbody></table></div><p>Battery life on the Galaxy Z Flip 8 moves in the right direction, but only by a hair. In our battery drain test, the Z Flip 8 logged an average time of 12 hours and 5 minutes, edging out the Z Flip 7 by under half an hour. What’s strange is that despite having the same 4,300 mAh capacity as before, the Snapdragon 8 Elite Gen 5 doesn't bring as dramatic an endurance boost as what I found with the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Z Fold 8 Ultra</a>. At the same time, the Motorola Razr Ultra (2026) blows past both Samsung clamshells with a massive 16:20 battery runtime.</p><p>Unlike the new Folds, the Z Flip 8 doesn’t get faster 45W wired charging. Instead, it remains capped at 25W, and its charging times are barely faster than the Z Flip 7's — with the phone reaching 59% in 30 minutes compared to last year's 55%.</p><h3 class="article-body__section" id="section-not-enough-software-improvements"><span>Not enough software improvements</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5405px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xrCY54SFGKoAniBXQAyGV6" name="Samsung Galaxy Z Flip 8 review" alt="Samsung Galaxy Z Flip 8 folded halfway." src="https://cdn.mos.cms.futurecdn.net/xrCY54SFGKoAniBXQAyGV6.jpg" mos="" align="middle" fullscreen="" width="5405" height="3040" 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>On the software front, One UI 9 covers all the basics I want, offering the same strong level of multitasking and productivity Samsung’s custom experience has continually delivered. However, there are only a few new AI tricks, including more multimodal tools, enhanced Flip Shot shooting options, and minor updates to both <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">Now Brief and Now Nudge</a>.</p><p>The outer FlexWindow, in particular, feels underutilized despite bringing more apps and basic actions to the cover screen. Aside from minor widget updates and basic app support, Samsung hasn't introduced any breakthrough features here. I was hoping for more specialized Galaxy AI tools, but the fact that Samsung didn’t give the Z Flip 8 the same AI-tracking <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">My FanCam feature found on the Z Fold 8</a> says a lot about where the software falls short.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-flip-8-review-bottom-line"><span>Samsung Galaxy Z Flip 8 review: Bottom line</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4937px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="L8LuGeK3a2xS3qb8XqvTX6" name="Samsung Galaxy Z Flip 8 review" alt="Samsung Galaxy Z Flip 8 held in the hand with display on." src="https://cdn.mos.cms.futurecdn.net/L8LuGeK3a2xS3qb8XqvTX6.jpg" mos="" align="middle" fullscreen="" width="4937" height="2777" 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 Samsung Galaxy Z Flip 8 remains one of the sleekest, most refined clamshell foldables you can buy, but its generational leaps are getting harder to see. On one hand, the return to a Qualcomm silicon with the Snapdragon 8 Elite Gen 5 delivers impressive performance gains, the screen gets bright enough to tackle outdoor glare with ease, and video features like Horizontal Lock make it an even more formidable tool for vlogging. If you're coming from a Z Flip 5 or an older slab phone, these upgrades are enough to warrant buying.</p><p>However, when paired with a $100 price hike that pushes the base model to $1,199, Samsung's baby-step approach feels tough to defend. With the overall design aesthetic, camera specs, charging speeds, and battery endurance remaining unchanged as before — all while competitors like the Motorola Razr Ultra 2026 push the envelope in battery life and image detail — the Z Flip 8 feels less like a step forward and more like a complacent upgrade settled on just getting by.</p><p>It's still a great foldable, but in a market where price tags keep climbing, minor polish is no longer enough to justify the upgrade.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ev1n9X"></div>                            </div>                            <script src="https://kwizly.com/embed/ev1n9X.js" async></script>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Don't pay full price for your Galaxy Z Fold 8: this preorder deal knocks up to $1,200 off ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/dont-pay-full-price-for-your-galaxy-z-fold-8-this-preorder-deal-knocks-up-to-usd1-200-off</link>
                                                                            <description>
                            <![CDATA[ The Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra are two of the most expensive foldables on the market. Here's how you can save up to $1,200 with early preorders. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CvmRFGxbjTsdpfZKWKvQu6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/GtEqu8qMu5TFusi2Q5xh2K-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 31 Jul 2026 20:06:23 +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.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/GtEqu8qMu5TFusi2Q5xh2K-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8 held in hand]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8 held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8 held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/GtEqu8qMu5TFusi2Q5xh2K-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra are slated to release on August 8. Priced at $1,899 and $2,099, respectively, these new phones are among the priciest foldables I've seen. But they don't need to be. There are plenty of <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">Galaxy Z Fold 8 preorder deals</a> you can get right now and Samsung has some of the best. </p><p>For example, right now you can get <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow">up to $1,200 off the Galaxy Z Fold 8 at Samsung</a> with trade-in. Don't have a phone to trade? Samsung will offer you a $200 Samsung credit. We gave the Fold 8 an Editor's Choice award and said it feels like the future of foldables. Below I've rounded up all of Samsung's Galaxy Z preorders.</p><p>Looking for more personal recommendations? Make sure to check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> homepage and our <a href="https://www.tomsguide.com/news/ultimate-back-to-school-guide">back to school deals</a> guide. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.samsung.com/us/smartphones/all-smartphones/" target="_blank" rel="nofollow"><strong>shop all Galaxy deals at Samsung</strong></a></li><li><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"><strong>up to $1,200 off w/ trade-in</strong></a></li><li><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"><strong>up to $1,200 off w/ trade-in</strong></a></li></ul><h3 class="article-body__section" id="section-best-galaxy-z-deals"><span>Best Galaxy Z deals</span></h3><div class="product"><a data-dimension112="bbf62894-8d1a-11f1-964c-2b8b30be3e70" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: 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: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.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorder: </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="bbf62894-8d1a-11f1-964c-2b8b30be3e70" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: 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 preorders 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/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="bbf62894-8d1a-11f1-964c-2b8b30be3e70" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="bbf6290c-8d1a-11f1-8413-1f610fa19001" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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: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.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra preorder: </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="bbf6290c-8d1a-11f1-8413-1f610fa19001" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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 preorders 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/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 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="bbf6290c-8d1a-11f1-8413-1f610fa19001" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in @ Samsung" 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&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[ How I use Google Maps to time travel, avoid bad air, and survive zero service ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/how-i-use-google-maps-to-time-travel-avoid-bad-air-and-survive-zero-service</link>
                                                                            <description>
                            <![CDATA[ From time travel to dodging bad air, these 5 Google Maps features saved my trips — and turned me into a power user. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">bwdHobfQrdhQP3XrkxYf7C</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Q82gTVfSngY342JtDgZANC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 31 Jul 2026 11:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Mobile Apps]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                                                                                    <dc:creator><![CDATA[ David Crookes ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yQWsHDmJr9eBZrL4xqd3bE.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;David Crookes has been writing professionally for close to 30 years and, as well as a great fondness for gaming, space, film, music, history, health and politics, he&#039;s largely specialized in technology for much of his career. He particularly focuses on Apple devices, having admired the company&#039;s tech since using iMac G3 in 1998. He also developed a fondness for the older Macintosh LC III that he later used in his first job as a newspaper reporter.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Since becoming a freelance writer, he has written for a wide number of publications including the Apple-focussed magazines iCreate and Macworld as well as Micro Mart, Web User, T3, Retro Gamer, MagPi, Computer Shopper, Gadget and 3D Artist. His love of gaming has seen him write for Retro Gamer, GamesTM and Wireframe among others and, despite his love of Apple, he still uses a PC – working for PC Pro and once writing for Total PC Gaming.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;One of his joys is helping others to use technology which has led him to writing many “how to” tutorials explaining many ways of getting the most out of various devices. He&#039;s become an expert user of the iPhone, iPad, Mac, Apple Watch and Apple TV. He also likes to kick back with a gaming session on an PlayStation 5 or Xbox Series X | S while getting his retro fix on an Evercade handheld.&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/Q82gTVfSngY342JtDgZANC-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Maps logo on phone with map in background]]></media:description>                                                            <media:text><![CDATA[Google Maps logo on phone with map in background]]></media:text>
                                <media:title type="plain"><![CDATA[Google Maps logo on phone with map in background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Q82gTVfSngY342JtDgZANC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google Maps has become one of life’s essentials thanks to a host of features that make navigation feel effortless. I use it as a matter of routine when I’m driving, even if I know where I’m going — it flags up problems, offers alternative routes, and gives an accurate ETA. But Google Maps does so much more than basic directions.</p><p>The more I use and explore the app, the more impressed I become (and I love checking out the hidden tricks uncovered by the Tom’s Guide team!). While it’s packed with tools, there’s a handful of features I rely on above all others because they’ve proven, time after time, to save my trips. </p><p>Here are five of my absolute favorites. I hope they help you out, too.</p><section class="howto-block">                    <h2>1. Go back in time</h2>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/qXkgfHqQtunRaSEoqYHLW6.png"                                        alt=" favorite features in Google Maps"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/qXkgfHqQtunRaSEoqYHLW6.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide )</div></figure>                    <p><p>Think time travel is confined to the land of make-believe? It’s actually possible in Google Maps if you use Street View. This feature lets you see how an area has changed over time, making it easy to check a property's history, monitor construction projects, or simply reminisce. As long as Google has historical imagery available, you can go back years, if not decades.</p><p>To activate it, <strong>search for a location</strong> or <strong>hold your finger on the map to drop a pin</strong>. Next, <strong>tap the preview image</strong> that appears on the screen.</p><p>Now <strong>click on See more dates</strong> and you’ll be able to <strong>swipe through the timeline carousel</strong> and <strong>select a past year</strong>.</p></p>                </section><section class="howto-block">                    <h2>2. Check out a location</h2>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/ZfdAQUrdD3TNEwPwQ9gif6.png"                                        alt=" favorite features in Google Maps"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/ZfdAQUrdD3TNEwPwQ9gif6.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>When traveling somewhere unfamiliar, I always like to check out the destination before I arrive. Scouting out parking lots and getting a visual on the building beforehand ensures the final leg of the journey is far less stressful, and saves a chunk of time once you get there.</p><p>For this, alongside Street View, I make use of Immersive View. It’s not available everywhere just yet, but it’s always a treat when you can use it.</p><p><strong>Enter the name of a city </strong>such as London, Tokyo, or New York, and <strong>tap a landmark icon</strong>.Then<strong> look in the photos section and select Immersive View</strong>, if it's available. This allows you to <strong>swipe left and right</strong> to explore the area or <strong>zoom in and out</strong>.</p><p>You can get a birds eye view of an area, find the entrance to buildings and amenities with ease and see what’s nearby with clear labels. It’s really quick to navigate and certainly worth <a href="https://www.tomsguide.com/phones/i-just-discovered-this-hidden-google-maps-feature-that-makes-my-route-planning-way-better">checking out</a>.</p></p>                </section><section class="howto-block">                    <h2>3. Monitor air quality</h2>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/XKnBpV2sdS2Cw9D6ei5tL6.png"                                        alt=" favorite features in Google Maps"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/XKnBpV2sdS2Cw9D6ei5tL6.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>If I’m going to spend a lot of time outdoors, especially if I’m going for a run, I like to know the quality of the air I'm breathing.</p><p>With Google Maps, <strong>just search a destination and tap the Layers icon</strong> near the top right. <strong>Selecting Air Quality gives you an instant, color-coded map </strong>with an easy-to-read scale based on real-time station measurements. </p><p>Tap any area to see specific health concerns, who might be at risk, and what precautions you should take.</p></p>                </section><section class="howto-block">                    <h2>4. Create lists</h2>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/t2DAcCLFgbozVZ4XfCmeD6.png"                                        alt=" favorite features in Google Maps"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/t2DAcCLFgbozVZ4XfCmeD6.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Google Maps is a great tool to plan an entire trip. There’s loads of information about locations of interest with reviews, prices, images and more. By creating your own lists, you’re able to bring relevant information together and they don’t take very long to put together, either.</p><p>Simply <strong>tap a location of interest</strong> and <strong>select the bookmark icon</strong>. You’ll have the option to <strong>start a new list</strong> but you can also <strong>use a pre-made list</strong> such as ‘Want to go’, ‘Favorites’ and ‘Starred places’. Whenever you add a location to a list, you can add a note.</p><p>When you view your list (<strong>select the You tab</strong> at the bottom of the screen and <strong>select the list</strong>), you’ll find your selected locations are highlighted on the map, so you can easily identify them. </p></p>                </section><section class="howto-block">                    <h2>5. Access Google Maps offline</h2>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/xAdoTfVdzGreN3vUQDN746.png"                                        alt=" favorite features in Google Maps"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/xAdoTfVdzGreN3vUQDN746.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>It can be frustrating, and a little unnerving, to lose cellular coverage right when you need directions. If I know an area is going to be patchy, I always plan ahead and download offline access to Google Maps. It does require sufficient phone storage (something I’m rapidly running out of!), but for total peace of mind on the road, it’s a trade-off I’m always willing to make.</p><p>Anyway, offline access is easy. <strong>Enter an address</strong> then <strong>swipe up to view the card</strong>. <strong>Swipe left </strong>and you should see an option to <strong>tap Download offline map</strong>. If not, <strong>keep swiping</strong>, <strong>select More</strong> and the option will be there.</p><p>To use that map, just <strong>use Google Maps as you normally would</strong>. The app will detect if its needs the download and use it automatically.</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OKJnMW"></div>                            </div>                            <script src="https://kwizly.com/embed/OKJnMW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/computing/why-google-maps-keeps-sending-you-the-long-way-and-how-to-stop-it">Google Maps actually defaults to the slowest route now — here's how to fix it</a></li><li><a href="https://www.tomsguide.com/phones/how-to-stop-google-maps-from-displaying-your-home-to-strangers">The one Google Maps tip everyone should know — how to blur your home in Street View</a></li><li><a href="https://www.tomsguide.com/computing/google-has-been-hiding-a-flight-simulator-for-20-years-now-its-free-on-the-web">Google has been hiding a flight simulator for 20 years and now it's free on the web — here's how to use it</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ ‘We don’t want to overwhelm the consumer with AI’: why Samsung is taking a different approach with Galaxy Z Fold 8 launch ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/we-dont-want-to-overwhelm-the-consumer-with-ai-why-samsung-is-taking-a-different-approach-with-galaxy-z-fold-8-launch</link>
                                                                            <description>
                            <![CDATA[ The Galaxy Z Fold 8 is less in your face with AI features. I spoke with Samsung executive vice president Jay Kim about why it’s taking a subtler approach with AI this time around. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3Tt3MLxucb7M53j4JppBC4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/CdhsuAu4DLMo5biUye6HoG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 31 Jul 2026 07:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[AI]]></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.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/CdhsuAu4DLMo5biUye6HoG-1280-80.jpg">
                                                            <media:credit><![CDATA[Samsung/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung executive vice president Jay Kim on the left and a Samsung Galaxy Z Fold 8 in hand on the right]]></media:description>                                                            <media:text><![CDATA[Samsung executive vice president Jay Kim on the left and a Samsung Galaxy Z Fold 8 in hand on the right]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung executive vice president Jay Kim on the left and a Samsung Galaxy Z Fold 8 in hand on the right]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/CdhsuAu4DLMo5biUye6HoG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>In case you hadn’t noticed, AI is having a bit of a backlash moment. More and more people are opposed to data center construction where they live, for example, and a lot of consumers (especially Gen Z) are questioning the need for generative AI overall.</p><p>Samsung seems to be tuned in to this sentiment with the launch 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> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>. Instead of hitting people over the head with ‘Galaxy AI,’ the company is focusing on a handful of features that it believes have real-world benefits.</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/azQSspXAvxY" allowfullscreen></iframe></div></div><p>“We don’t want to overwhelm the consumer with AI,” Samsung EVP Jay Kim told me. “A lot of industry focus on AI is sort of as itself as a technology, but I think it’s shifting from technology to benefits. We’re looking at how you make this meaningful, how do you make this more easy to access?”</p><h2 id="subtler-ai">Subtler AI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aU3ngqVpjk6ewWQungWboA" name="Fold 8 Now Nudge" alt="Galaxy Z Fold 8 Now Nudge AI feature" src="https://cdn.mos.cms.futurecdn.net/aU3ngqVpjk6ewWQungWboA.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One example is <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">Now Nudge</a>. Say you get an incoming text that references an upcoming appointment with the date. The Z Fold 8 and Z Fold 8 Ultra are smart enough to present a little Calendar button. When you tap that, the Calendar app will automatically open in Split View on the right side of the display.</p><p>“You're looking at the screen, and then it understands where you're looking at, and then it actually provides the next action, it suggests your action,” Kim said. “Before you have to go through extra steps to make that work, but now it's instant. We’re just trying to help consumers get things done in a more easy way.”</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="BKuYJAmt7SFTZcMMhZcz3c" name="z-fold-8-fancam-6" alt="Using the My FanCam feature on Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/BKuYJAmt7SFTZcMMhZcz3c.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>Another example of AI that’s less in your face is My FanCam. When editing a video on the Galaxy Z Fold 8 and Fold 8 Ultra, you can select a subject and the phone will recut the video so that it “follows” only that person. You can even choose your preferred aspect ratio. And it works seamlessly based on my testing.</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/6m04UbLVC9E" allowfullscreen></iframe></div></div><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/aFwm3S3JDE0" allowfullscreen></iframe></div></div><p>To access this feature you have to select the AI icon first. One might argue it’s too subtle and not easily discoverable enough.</p><p>“We’re looking at consumers and we're looking at how they behave and how they use a device,” said Kim. “We just want to make sure that they get what they need at the right time, without sort of thinking too much about whether it's coming from AI.”</p><h2 id="automating-the-everyday">Automating the everyday</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xk5KeA75WpyRNUfgTjXLuY" name="Fold 8 multitasking" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/xk5KeA75WpyRNUfgTjXLuY.jpg" mos="" align="middle" fullscreen="" width="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 Galaxy Z Fold 8 series is even letting AI do stuff for you in the background with Gemini Intelligence task automation, which now supports 40 apps. This includes shopping, restaurant reservations, travel booking and event tickets.</p><p>For example, you can tell your Fold 8 to help book you a vacation and give it some parameters, and it will start working with Expedia to make it happen. You can jump in at any time, and Gemini Intelligence won’t make any purchases without your approval.</p><p>“When we put automation in place it has to work right,” Kim said. “The consumer needs to understand how it works. So we’re taking it one step at a time and we’re not rushing, because the experience is more important.”</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/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview">Galaxy Z Fold 8 interview: Samsung on silicon carbon batteries, the (possible) S Pen return and the iPhone Ultra threat</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/9-best-samsung-galaxy-z-fold-8-and-fold-8-ultra-cases-to-protect-your-new-smartphone-from-usd19">9 best Samsung Galaxy Z Fold 8 and Fold 8 Ultra cases to protect your new smartphone — from $19</a></li><li><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">Samsung Galaxy Z Fold 8, Fold 8 Ultra, and Flip 8 battery life tested — silicon carbon pays off</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’ve tested hundreds of phone accessories this year — and these are the 9 that you won’t regret buying ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/ive-tested-hundreds-of-phone-accessories-this-year-and-these-are-the-9-that-you-wont-regret-buying</link>
                                                                            <description>
                            <![CDATA[ I've test hundreds of phone accessories in the last year and these are the nine that proved their worth to me and worth spending your money on. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">g7PgdRSFrUzy9UufQUAQ5S</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MeWXdwnWcmvdJYiXF7GQia-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 31 Jul 2026 05:30:00 +0000</pubDate>                                                                                                                                <updated>Fri, 31 Jul 2026 20:30:51 +0000</updated>
                                                                                                                                            <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/MeWXdwnWcmvdJYiXF7GQia-1280-80.jpg">
                                                            <media:credit><![CDATA[PNY / Satechi / Xtrem / Edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Different phone accessories together.]]></media:description>                                                            <media:text><![CDATA[Different phone accessories together.]]></media:text>
                                <media:title type="plain"><![CDATA[Different phone accessories together.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MeWXdwnWcmvdJYiXF7GQia-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve been reviewing phones for nearly 18 years, but as much as I enjoy getting my hands on the <a href="https://www.tomsguide.com/best-picks/best-phones">best phones</a> out there, what often makes them even better are the accessories. They’re not just cosmetic enhancements; they add a real layer of utility with massive benefits.</p><p>You can imagine the insane number of accessories I test throughout any given year, and I’ll be the first to admit that plenty of them are total garbage not worth your time. While many accessories only stick around in my setup for a couple of weeks, others earn a permanent promotion to daily drivers that I rely on constantly.</p><p>From compact <a href="https://www.tomsguide.com/best-picks/best-portable-chargers">power banks</a> that keep me charged on the go, to the most customizable phone case I’ve ever used, to dedicated mobile video gear, these are the nine phone accessories I continue to rely on — and every single one is well worth your hard-earned money.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ey4xjX"></div>                            </div>                            <script src="https://kwizly.com/embed/ey4xjX.js" async></script><h2 class="article-body__section" id="section-the-magsafe-accessories-i-can-t-live-without"><span>The MagSafe accessories I can’t live without</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/w9UWkZp4BLbpQReNRVT4zW.gif" alt="Xtrem Inno case gif." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hh33LkoPUzesXQf2A99DT9.jpg" alt="Nomad Leather Mag Wallet on iPhone 17 Pro case." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kxzY5y9qF4S9cTUoByKgW7.jpg" alt="Aulumu G05 Pro on iPhone." /><figcaption><small role="credit">Aulumu</small></figcaption></figure></figure><p>I can’t tell you how much I rely on MagSafe. While iPhones certainly have access to a wealth of magnetic gear, I actually use these accessories on many of the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phones</a>, too — whether through built-in magnets, like <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">Google’s PixelSnap</a>, or via a MagSafe-compatible case. They just make everyday phone use so much more convenient.</p><p>Sure, you could get any ordinary cover, but the <a href="https://www.tomsguide.com/phones/iphones/all-other-iphone-cases-are-dead-to-me-after-testing-this-one-with-an-e-ink-display-heres-why"><strong>Xtrem Inno Case</strong></a> is the most customizable one I’ve ever come across in my years of testing phones. What’s so striking is how it balances rugged protection with a one-of-a-kind e-ink display that lets me change the back image to whatever I want. Best of all, it doesn’t require a dedicated battery to power the e-ink screen, keeping the design impressively slim in the process. And yes, I can still charge my phone seamlessly via MagSafe!</p><p>In 2026, you shouldn’t be carrying a bulky traditional wallet — especially when so many cards are digital now. That’s why I almost always keep the <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"><strong>Nomad Leather MagSafe Wallet</strong></a> snapped to the back of my phone, where I've managed to fit up to six cards into the slot. It also supports Apple’s Find My network, so I can track its location or play a chime to find it under the couch cushions. Unlike other trackable wallets that force you to use a clunky proprietary cable, I love that this one recharges wirelessly on any standard <a href="https://www.tomsguide.com/best-picks/best-magsafe-chargers-for-your-iphone-year">MagSafe charger</a>.</p><p>Finally, the <strong>Aulumu G05 Pro</strong> is one of those versatile MagSafe accessories that lives either on the back of my device or in my pocket. Part sturdy kickstand, it also functions as a discreet multi-tool with a concealed screwdriver, SIM tool, serrated edge, and tiny utility blade. Believe me, it beats hauling around a heavy traditional multi-tool.</p>        <div class="featured_product_block featured_block_hero" data-id="e7e3b5fe-8c2d-11f1-be14-774f78a800c7">            <a href="https://www.amazon.com/dp/B0GZW4RQYD" data-model-name="Xtrem Inno Instant Custom Case for Iphone 17 Pro (orange)" 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/YG8frQP5enRxJ6aojWE9Kd.jpg" alt="Xtrem Inno Instant Custom Case for Iphone 17 Pro (orange)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>XTREM INNO</div>                                        <div class="featured__title">Xtrem Inno Instant Custom Case for Iphone 17 Pro (orange)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e7e3b572-8c2d-11f1-b94b-bb1bf38f9f7f">            <a href="https://www.amazon.com/NOMAD-integrated-tracking-Rechargeable-Compatible/dp/B0FX9J27J5/" data-model-name="Nomad Leather Black 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/7c5KkojX78RBgMU7Y6yKwb.jpg" alt="Nomad Leather Black Magsafe Wallet W/integrated Tracking for Iphone, Slim Magsafe Card Holder for Iphone, Wallet Gps Tracker Card 5 Months Battery Life, Rechargeable, Compatible With Ios Only"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>NOMAD</div>                                        <div class="featured__title">Nomad Leather Black Wallet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e7e3b3a6-8c2d-11f1-a0c6-eb48207900c6">            <a href="https://www.amazon.com/Aulumu-Kickstand-Multi-tool-Adjustment-Screwdriver/dp/B0H1R6WSZK/" data-model-name="Aulumu G05 Pro Magnetic Phone Kickstand" 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/mVi9YR6jJXNHAX9MtmUdra.jpg" alt="Aulumu G05 Pro Magnetic Phone Kickstand With Edc Multi-Tool | Rotation Angle Adjustment | Ultra Light & Ultra Thin | With Screwdriver/steel File/saw Blade/sim Ejector Pin/utility Knife - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Aulumu</div>                                        <div class="featured__title">Aulumu G05 Pro Magnetic Phone Kickstand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 class="article-body__section" id="section-power-and-storage-gear-to-keep-you-working-on-the-go"><span>Power and storage gear to keep you working on the go</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/nx8RddccQzW3G2DT8N5QdA.jpg" alt="MIRO V99 Power Bank Gaming Console." /><figcaption><small role="credit">Tom's Guide / John Velasco</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5ricqEKiHkMSNMbKw4uvTJ.jpg" alt="Satechi OntheGo 7-in-1 Multiport Adapter connected to iPhone." /><figcaption><small role="credit">Tom's Guide / John Velasco</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/mzcmQFmc4ENa5NNqFkD9Vn.jpg" alt="PNY DUO LINK V3 Flash Drive against green background." /><figcaption><small role="credit">PNY</small></figcaption></figure></figure><p>When I need to stay productive, I lean on phone accessories that do double duty. That’s why I keep the <a href="https://www.tomsguide.com/phones/i-bought-this-magsafe-power-bank-to-charge-my-iphone-anywhere-and-it-doubles-as-a-retro-gaming-handheld"><strong>Miro V99 Power Bank</strong></a> in my backpack whenever I head into the office. Not only is it a solid MagSafe power bank that tops off my phone while I’m out and about, but it also doubles as a handy <a href="https://www.tomsguide.com/opinion/i-tried-these-new-retro-handheld-game-consoles-and-theyre-the-perfect-hit-of-nostalgia">retro gaming handheld</a> — complete with all the buttons needed to play classic titles. I can’t tell you how intense it got trying to beat Contra in one run while waiting for my subway!</p><p>Another workstation essential I always pack is the <a href="https://www.tomsguide.com/phones/i-gave-my-iphone-the-same-ports-as-my-laptop-with-this-magsafe-accessory-and-now-i-bring-it-with-me-everywhere"><strong>Satechi On-the-Go 7-in-1 USB-C Hub</strong></a>. It serves as a command center for both my phone and laptop, equipped with USB-A, USB-C, and HDMI ports to connect my device to external displays and peripherals around the office. I’ve used it to mirror my phone directly to a desktop monitor, and the built-in Ethernet port makes offloading heavy video files to Google Drive infinitely faster than relying on spotty Wi-Fi.</p><p>Finally, the <strong>PNY DUO LINK V3 Flash Drive</strong> bridges the gap seamlessly between my phone and laptop. Featuring both USB-C and USB-A connectors on opposite ends, it gives me a quick, physical way to transfer large media files without waiting on cloud syncs. It’s become one of those indispensable accessories I rely on during chaotic press events, thanks to its dead-simple plug-and-play compatibility.</p>        <div class="featured_product_block featured_block_hero" data-id="e7e3b43c-8c2d-11f1-852a-7986631ccbec">            <a href="https://www.newegg.com/black-miro-v99-5000-mah-power-bank/p/39G-01GM-00009" data-model-name="Miro V99 Wireless Charger/Gaming Console" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:84.14%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Ek5JHUbTHzDKdNRpsFCAz6.webp" alt="Miro V99 3-In-1 Magnetic Wireless Charger 5000mah Multifunctional Power Bank Gaming Console 15w Megsafe 20w Pd Fast Charge - Newegg.com"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Miro</div>                                        <div class="featured__title">Miro V99 Wireless Charger/Gaming Console</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e7e3b4d2-8c2d-11f1-9a0b-a1c167668147">            <a href="https://www.amazon.com/dp/B0FWR19DW7/" data-model-name="Satechi Onthego 7-In-1 USB-C Hub" 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/HRCgEvfbMxiLwXSxcDxudY.jpg" alt="Satechi Onthego 7-In-1 Usb-C Hub, 4k/60hz Hdmi, 100w Pd, Space Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Satechi</div>                                        <div class="featured__title">Satechi Onthego 7-In-1 USB-C Hub</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e7e3b72a-8c2d-11f1-b5f6-3b9318bcf141">            <a href="https://www.amazon.com/PNY-External-Compatible-Smartphone-Desktops/dp/B0FC3GCM8D/" data-model-name="PNY 256GB Duo Link USB Flash Drive" 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/FWyTDQAhPE5aBfBwVWdZtZ.jpg" alt="Pny 256gb Duo Link V3 Usb 3.2 Gen 2 Type-C & Type-A Otg Flash Drive Extreme Speeds Read/write 1000/800mb/s External Mobile Storage Compatible With Smartphone/tablet/laptops/desktops"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PNY</div>                                        <div class="featured__title">PNY 256GB Duo Link USB Flash Drive</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 class="article-body__section" id="section-pro-grade-gear-for-better-mobile-video"><span>Pro-grade gear for better mobile video</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/EN3J2LskNmiyKPFKytQaff.jpg" alt="SmallRig Fold P20 Mobile Pocket Video Rig connected to phone." /><figcaption><small role="credit">SmallRig</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/nvTTfDkLuFwsBUafpA7gRe.jpg" alt="Lisen magnetic suction cup mount" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kVZ4PZZZ2DvZQRVFaVuh2j.jpg" alt="Hollyland Lark MAX 2 Wireless Microphone." /><figcaption><small role="credit">Hollyland</small></figcaption></figure></figure><p>Video is one of the most powerful mediums around, so you need gear that will elevate your content creation. Don’t settle for single-use accessories — like clunky, old-school tripod adapters — when you can get stuff that’s far more versatile.</p><p>Instead, I recommend the <a href="https://www.amazon.com/Smartphone-Filmmaking-Stabilizer-Videomaker-Video-grapher/dp/B0CB3DBG6J/" target="_blank" rel="nofollow"><strong>SmallRig Fold P20 Mobile Pocket Video Rig</strong></a>. It’s so much more than a standard phone holder because when it's fully unfolded, its dual handles give you serious hardware stabilization for ultra-smooth handheld footage, along with built-in cold shoe mounts for attaching lights and mics. Best of all, it folds down into an incredibly compact footprint that easily slides into a backpack pocket.</p><p>The <a href="https://www.tomsguide.com/vehicle-tech/this-minimalist-car-phone-mount-proves-compact-designs-arent-always-the-answer"><strong>Lisen Suction Phone Mount</strong></a> doesn’t cost a lot, but it’s become my go-to phone holder thanks to its rock-solid magnetic connection and vacuum-seal suction. I use it most when filming inside the latest electric cars I test, mainly because its adjustable, rotating arm lets me dial in virtually any angle. Beyond mounting it on a windshield or dashboard, I love that I can stick it to almost any flat glass or metal surface for unique B-roll shots.</p><p>Finally, nothing ruins a good video faster than terrible audio, which is why a dedicated wireless microphone system is non-negotiable. While many creators default to DJI or Rode, I stick with the <a href="https://www.amazon.com/Hollyland-Microphone-Monitoring-Full-Chain-Earphones/dp/B0F2YG21R3/" target="_blank" rel="nofollow"><strong>Hollyland Lark MAX 2</strong></a> because of its incredible versatility across both my phone and mirrorless camera setups. What really sets it apart is its ultra-compact phone receiver and a pair of wireless monitoring earbuds that let me check audio levels in real time. It may be an investment, but it’s the one mic system I rely on for everything.</p>        <div class="featured_product_block featured_block_hero" data-id="e7e3b266-8c2d-11f1-a5e4-b79516ab4f95">            <a href="https://www.smallrig.com/uk/SmallRig-Fold-P20-Mobile-Pocket-Video-Rig-4047.html" data-model-name="Fold P20 Mobile Pocket Video Rig" 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/HejifGTf2zVmkQT76y4rTX.jpg" alt="Fold P20 Mobile Pocket Video Rig"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SmallRig</div>                                        <div class="featured__title">Fold P20 Mobile Pocket Video Rig</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e7e3b306-8c2d-11f1-b88e-6bbd3d474b9c">            <a href="https://www.amazon.com/LISEN-Suction-All-Metal-Adjustable-Magnetic/dp/B0GVDCFQT2/" data-model-name="Lisen Suction Phone Mount" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.56%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/5AfQeDmABnscbPePpXuDy.jpg" alt="Lisen Suction Phone Mount"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>LISEN</div>                                        <div class="featured__title">Lisen Suction Phone Mount</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e7e3b694-8c2d-11f1-a5ab-adb968eda32f">            <a href="https://www.amazon.com/dp/B0F2YG21R3/" data-model-name="Hollyland Lark MAX 2 Wireless Microphone" 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/Hye6EiGuKoW8CCECQNjbic.jpg" alt="Hollyland Lark MAX 2 Wireless Microphone deal block."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Hollyland</div>                                        <div class="featured__title">Hollyland Lark MAX 2 Wireless Microphone</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </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/i-tried-using-the-galaxy-z-fold-8s-myfancam-on-my-dogs-but-i-hit-a-major-wall">I tried using the Galaxy Z Fold 8’s MyFanCam on my dogs, but I hit a major wall</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use">iOS 27 finally fixes the most annoying iPhone workaround we all use</a></li><li><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">Galaxy Z Fold 8 Ultra doesn't have a crease-free display — but it's the closest Samsung has ever got to one</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 'We reluctantly raised prices': Tim Cook weighs in on hikes as Apple reports $109 billion in revenue ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/we-reluctantly-raised-prices-tim-cook-weighs-in-on-hikes-as-apple-reports-usd109-billion-in-revenue</link>
                                                                            <description>
                            <![CDATA[ Tim Cook discussed the recent Apple price hike during the company's Q3 Earnings call and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">g4F4UTADUuGbK59EDX2uQN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sgFbSNcoQK45KvpFSYLWf5-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 30 Jul 2026 22:37:13 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 22:37:20 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/sgFbSNcoQK45KvpFSYLWf5-1280-80.jpg">
                                                            <media:credit><![CDATA[Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple CEO Tim Cook]]></media:description>                                                            <media:text><![CDATA[Apple CEO Tim Cook]]></media:text>
                                <media:title type="plain"><![CDATA[Apple CEO Tim Cook]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sgFbSNcoQK45KvpFSYLWf5-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple held its third-quarter earnings call today, where the tech giant reported "record" $109 billion earnings, largely driven by a 22% increase in iPhone sales. Despite that, Apple's stock fell 8% based on missed revenue estimates in China and the company's services arm.</p><p>Outgoing CEO Tim Cook, in his swan song earnings call, was also questioned by investors about the impact of the ongoing memory crisis on Apple supply and future forecasts. </p><p>"We reluctantly raised prices," Cook said, referring to <a href="https://www.tomsguide.com/computing/macbooks/apple-price-hikes-are-official-heres-how-much-more-youll-pay-for-macbooks-and-ipads-now">last month's price increases</a> that affected every Apple device except the iPhone.</p><p>"We did it because we’re in what I’d categorize as a 100-year flood on memory pricing," Cook continued, <a href="https://finance.yahoo.com/technology/articles/tim-cook-issues-chilling-warning-155000396.html?guccounter=1&guce_referrer=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8&guce_referrer_sig=AQAAAJpYBVU8ZIqTjfgtAl3GPxGSWkvrBb154uhNSWAyEIaCPbasUjC0lSsQTxIu4nRDsp36A-pFR2hKz1C68c5DJizZfdVQ1FdlC_MnDzMFaTEZG65lf_5xjeGJW7K1PYGM2IaEY7z0RcnSkwcxdwvJXBQ4G01ne_tQlaNFz8JBVA2V" target="_blank">repeating an analogy</a> he made a month ago.</p><h2 id="what-apple-is-saying-about-the-memory-crunch">What Apple is saying about the memory crunch</h2><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="xvJgTcuknLbUZo9QawcVzi" name="macbook neo" alt="macbook neo" src="https://cdn.mos.cms.futurecdn.net/xvJgTcuknLbUZo9QawcVzi.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>During the call, Cook admitted that Apple is facing supply constrains that are affecting iPhone, Macs and iPads, primarily on Macs. Cook asserted several times that this issue was largely driven by surprising amounts of demand. </p><div><blockquote><p>"We expect the impact from supply chain constraints to increase significantly [in September]"</p><p>Tim Cook — CEO, Apple</p></blockquote></div><p>Both Cook and Chief Financial Officer Kevan Parekh noted that the supply chain has become less "flexible" which was blamed on nodes for advanced SoCs and that they expected continued high levels of demand. </p><p>"We expect the impact from supply chain constraints to increase significantly [in September]," Cook said. In response to an investor Cook said that Apple expects to pay even more for memory through the next quarter. </p><p>Investors were only allowed two questions but nearly everyone who spoke used at least one to ask about memory and pricing. Cook repeatedly claimed that the cause of Apple supply constraints  is "not a regular supply issue" and instead said it was a demand forecast issue where iPhones and Macs performed "remarkably better than we thought they would."</p><p>However, "we’ve got a quarter that we’re going to be scrambling on supply side," Cook told one investor.</p><p>The upcoming fourth quarter will tell us a lot about how Apple is dealing with the memory crisis. Price increases might defray rising component costs, and the <a href="https://www.tomsguide.com/ai/chatgpt/is-the-apple-upgrade-program-a-good-deal-or-a-rip-off-i-asked-chatgpt-to-crunch-the-numbers-and-heres-the-verdict">new Apple Upgrade Program</a> could help the company keep a more constant source of revenue. </p><p>Apple still has the iPhone 18 series, new Macs and iPads to release and potentially more. But we're already bracing for a <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-rumor-usd200-more-and-now-just-3-colors">potential $200 price increase</a> for the iPhone 18 Pro models. And a possible $2,500 <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Ultra</a>.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/chatgpt/is-the-apple-upgrade-program-a-good-deal-or-a-rip-off-i-asked-chatgpt-to-crunch-the-numbers-and-heres-the-verdict">Is the Apple Upgrade program a good deal or a rip-off? I asked ChatGPT to crunch the numbers and here's the verdict</a></li><li><a href="https://www.tomsguide.com/phones/iphones/new-iphone-20-video-reveals-the-8-biggest-upgrades-to-expect-from-the-20th-anniversary-iphone">New iPhone 20 video reveals the 8 biggest upgrades to expect from the 20th anniversary iPhone</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-knew-better-than-to-carry-around-a-naked-phone-then-my-iphone-17-pro-max-met-the-asphalt">I knew better than to carry around a naked phone — then my iPhone 17 Pro Max met the asphalt</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 Pro Fold images just leaked ahead of launch — see it from every angle (including a weird LED) ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-images-just-leaked-ahead-of-launch-see-it-from-every-angle-including-a-weird-led</link>
                                                                            <description>
                            <![CDATA[ The forthcoming Google Pixel 11 Pro Fold has appeared in leaked images, including peeks at the Pixel Watch 5 and new Pixel Buds. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">UpkJZxXWSotqTFQni4Jv3E</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wVxBg3nRM8LJUk4YxJmXy3-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 30 Jul 2026 19:08:34 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/wVxBg3nRM8LJUk4YxJmXy3-1280-80.jpg">
                                                            <media:credit><![CDATA[Evan Blass]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Pixel 11 Pro Fold]]></media:description>                                                            <media:text><![CDATA[Google Pixel 11 Pro Fold]]></media:text>
                                <media:title type="plain"><![CDATA[Google Pixel 11 Pro Fold]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wVxBg3nRM8LJUk4YxJmXy3-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Summer is the season of the foldable; with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8 already reviewed</a> and Google slated for August, we turn our attention to the upcoming <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Pixel 11 Pro Fold</a>. </p><p>A new leak from <a href="https://evleaks.substack.com/p/p11pf?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6608d2c0-7707-4156-82ca-a44b58a90bd1_1440x800.jpeg&open=false" target="_blank">semi-retired tipster Evan Blass</a> just revealed what appear to be marketing images that showcase Google's foldable smartphone from nearly every angle. </p><p>Take a look:</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/RGs362yg7sqWDX2WYmrbzm.jpg" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/tqrWUz5uki35wvhN49PJxm.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JWbH36PSQgtyXmspDkjYxm.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/qHdGvGNKxrvgzubCgkDpum.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/B7DVYcKUWVeAVRjuf7MEum.png" alt="Leaked image of the Google Pixel 11 Pro Fold" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure></figure><p>The images don't reveal any new specifications, save that the inner display will be 8 inches, similar to last year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>. It will also have Gemini Intelligence, which shouldn't be too surprising.</p><p>Blass' leaked images seem to match <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-renders-just-leaked-heres-whats-different">leaked renders that popped up in March</a>, showing a phone that looks much the same as its predecessor.</p><p>The one strange change appears to be a new LED position in the upper left corner of the camera array. On the Pixel 10 Pro Fold, the flashlight and LED light are set to the right of the camera lenses. </p><p>I'm curious how this new integration will work with the cameras. It does make the camera array smaller and cleaner-looking.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:433px;"><p class="vanilla-image-block" style="padding-top:102.77%;"><img id="FCvAgY8j8KGgADcpavQzqm" name="d9a95443-3ebe-4f75-abe7-47fa9bf6466e_433x445" alt="Leaked image of the Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/FCvAgY8j8KGgADcpavQzqm.png" mos="" align="middle" fullscreen="" width="433" height="445" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>Surprisingly, we haven't seen too many leaks for the Pixel 11 Pro Fold. From everything that has popped up, don't expect too many exterior changes. </p><p>The biggest change will likely be an upgraded Tensor G6 chipset, which should be more powerful than the Tensor G5, which was a step up from the G4 but still lagged behind the Samsung Galaxy S25 Plus and iPhone 16 Pro.</p><p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-could-finally-catch-up-to-samsung-and-apple-on-performance-heres-how">G6 chipset will reportedly be built using the 2nm manufacturing process</a>, which means improved performance and efficiency thanks to increased transistor density.</p><h2 id="small-look-at-the-pixel-watch-5-and-pixel-buds">Small look at the Pixel Watch 5 and Pixel Buds</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7zeTvovRmxF5YteV4aCNrm.png" alt="Leaked image of the Google Pixel Watch 5" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vKpAChjp7hShqsEsgDVpum.png" alt="Leaked image of new Google Pixel Buds" /><figcaption><small role="credit">Evan Blass</small></figcaption></figure></figure><p>Buried at the bottom of Blass' newsletter are two smaller leaks; single images showcase what appear to be the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-5-rumors-everything-we-know-so-far">Pixel Watch 5</a> and a pair of Pixel Buds. It's not clear whether these are the Pro models.</p><p>Like the Pixel 11 Pro Fold, it seems Google isn't changing anything design-wise for its smartwatch. The big change might be a new Tensor chipset and some updated health features.</p><h2 id="pixel-11-pro-fold-release-date-and-price">Pixel 11 Pro Fold release date and price</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WGbuXswxTtiutkFqRd3AJa" name="Google Pixel 10 Pro Fold" alt="Google Pixel 10 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/WGbuXswxTtiutkFqRd3AJa.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Earlier this month, Bloomberg's Mark Gurman reported on an invite for the next Google Pixel event, which is set to take place <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-release-date-and-prices-leak-as-official-august-12-pixel-event-invites-go-out">in New York City on August 12</a> starting at 6 PM ET, a surprisingly late launch time.</p><p>Google phones typically hit store shelves about a week or two after events. The Pixel 9 was released on August 22, 2024, while the Pixel 10 hit on August 29, 2025. I expect a similar timeframe for the Pixel 11 series.</p><p>As for pricing,  given the <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">soaring cost of memory</a>, I wouldn't be surprised if we see a price increase. The Pixel Pro has been set at $999 for the last three years, but another $100 or $200 price seems likely.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-use-ai-but-i-dont-want-ai-making-my-choices-toms-guide-readers-sound-off-on-google-ai-search">'I use AI, but I don't want AI making my choices': Tom's Guide readers sound off on Google AI search</a></li><li><a href="https://www.tomsguide.com/computing/vpns/google-vpn-was-doomed-from-day-one-how-lack-of-trust-meant-it-never-had-a-chance">Google VPN was doomed from day one – how lack of trust meant it never had a chance</a></li><li><a href="https://www.tomsguide.com/computing/smart-glasses/exclusive-even-realities-ceo-slams-meta-ray-bans-we-dont-thrive-on-selling-data">Exclusive: Even Realities CEO slams Meta Ray-Bans — we 'don’t thrive on selling data’</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Is the Apple Upgrade program a good deal or a rip-off? I asked ChatGPT to crunch the numbers and here's the verdict ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/ai/chatgpt/is-the-apple-upgrade-program-a-good-deal-or-a-rip-off-i-asked-chatgpt-to-crunch-the-numbers-and-heres-the-verdict</link>
                                                                            <description>
                            <![CDATA[ We crunched the numbers and asked ChatGPT for some backup to determine if the Apple Upgrade Program is worth your dollar. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KTS5wBsPaf3KxBUMZzBBuN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MFu7d2DXVjRdBxS8LA8b4X-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 30 Jul 2026 19:00:39 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[ChatGPT]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[AI]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/MFu7d2DXVjRdBxS8LA8b4X-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone 17 vs iPhone 17 Pro.]]></media:description>                                                            <media:text><![CDATA[iPhone 17 vs iPhone 17 Pro.]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone 17 vs iPhone 17 Pro.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MFu7d2DXVjRdBxS8LA8b4X-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This week, Apple revealed its new <a href="https://www.tomsguide.com/phones/iphones/should-you-lease-your-next-iphone-what-you-need-to-know-about-the-rumored-apple-upgrade-program">Apple Upgrade Program</a> that lets you lease several of the company's devices, including iPhones, Macs, Apple Watches and iPads. </p><p>With fixed 12-, 24 or 36-month terms, you're locked into paying a monthly rate for your chosen device until the term is up or you decide to upgrade. Abandoning the lease early is possible, but there are a number of penalties and fees associated with doing so. </p><p>Is the Apple Upgrade Program a good deal versus buying the phone outright or getting it from a carrier? I crunched the numbers, but also turned to ChatGPT to find out if it's a ripoff or worth your dollar.  </p><h2 id="iphones-and-apple-watches">iPhones and Apple Watches</h2><p>Here's how much an iPhone or Apple Watch will cost you over a 24-month term. If you want to keep the device at the end of the lease, you'll need to pay the remainder.</p><div ><table><caption>Apple Upgrade Prices - iPhones and Watches</caption><thead><tr><th class="firstcol " ><p>Device</p></th><th  ><p>Upfront cost</p></th><th  ><p>Per month cost</p></th><th  ><p><strong>Total after 24 months</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPhone 17e</strong></p></td><td  ><p>$599</p></td><td  ><p>$17.99</p></td><td  ><p>$431.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Air</strong></p></td><td  ><p>$999</p></td><td  ><p>$28.99</p></td><td  ><p>$695.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17</strong></p></td><td  ><p>$799</p></td><td  ><p>$22.99</p></td><td  ><p>$551.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro</strong></p></td><td  ><p>$1,099</p></td><td  ><p>$31.99</p></td><td  ><p>$767.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>$1,199</p></td><td  ><p>$34.99</p></td><td  ><p>$839.76</p></td></tr><tr><td class="firstcol " ><p><strong>Apple Watch Series 11</strong></p></td><td  ><p>$399</p></td><td  ><p>$11.99</p></td><td  ><p>$287.76</p></td></tr><tr><td class="firstcol " ><p><strong>Apple Watch Ultra 3</strong></p></td><td  ><p>$799</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr></tbody></table></div><h2 id="macs-and-ipads">Macs and iPads</h2><p>And here's how it looks for Macs and iPads, which are eligible for a 36-month lease. This table specifically looks at a 24-month lease. </p><div ><table><caption>Apple Upgrade Prices - Macs and iPads</caption><thead><tr><th class="firstcol " ><p>Device</p></th><th  ><p>Upfront cost</p></th><th  ><p>Per month cost</p></th><th  ><p><strong>Total after 24 months</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPad Air</strong></p></td><td  ><p>$749</p></td><td  ><p>$15.99</p></td><td  ><p>$383.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPad Pro</strong></p></td><td  ><p>$1,199</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPad mini</strong></p></td><td  ><p>$599</p></td><td  ><p>$11.99</p></td><td  ><p>$287.76</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Air</strong></p></td><td  ><p>$1,299</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Pro</strong></p></td><td  ><p>$1,999</p></td><td  ><p>$38.99</p></td><td  ><p>$935.76</p></td></tr><tr><td class="firstcol " ><p><strong>iMac</strong></p></td><td  ><p>$1,499</p></td><td  ><p>$28.99</p></td><td  ><p>695.75</p></td></tr><tr><td class="firstcol " ><p><strong>Mac Studio</strong></p></td><td  ><p>$2,499</p></td><td  ><p>$48.99</p></td><td  ><p>$1,175.76</p></td></tr></tbody></table></div><h2 id="the-fine-print">The fine print</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EVijA7pZz2QcghNcincgHk" name="AppleCare+.jpg" alt="Apple Care plus settings app on new iPhone 12 Pro Max 5G smartphone model by Apple Computers close-up of Pacific Blue mobile phone device" src="https://cdn.mos.cms.futurecdn.net/EVijA7pZz2QcghNcincgHk.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Hadrian | Shutterstock)</span></figcaption></figure><p>There are two big caveats to Apple's leasing program. The first is that, according to the terms of service, if you miss three consecutive payments, Klarna (the company managing the lease) will terminate the contract, and the customer will owe the remaining balance.</p><p>The second is that AppleCare+ is not included with the lease. You could roll the dice and not subscribe to AppleCare+ but you are liable for any damage, per the fine print. </p><p><em>"Insurance is not included in your lease, and you may incur damage fees if the device is lost, stolen, or not returned in the condition required by the lease."</em></p><p>AppleCare+ ranges in cost from $2.99 (Watches) up to $9.99 (iPhone) per month depending on your device. There are annual payment options as well. </p><p>Here's the iPhone and Watches table again with how much a 24-month lease would set you back with AppleCare+.</p><div ><table><caption>Apple Upgrade Prices - iPhones and Watches</caption><thead><tr><th class="firstcol " ><p>Device</p></th><th  ><p>Upfront cost</p></th><th  ><p>Per month cost</p></th><th  ><p><strong>Total after 24 months</strong></p></th><th  ><p>Total with AppleCare+</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPhone 17e</strong></p></td><td  ><p>$599</p></td><td  ><p>$17.99</p></td><td  ><p>$431.76</p></td><td  ><p>$671.52</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Air</strong></p></td><td  ><p>$999</p></td><td  ><p>$28.99</p></td><td  ><p>$695.76</p></td><td  ><p>$935.52</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17</strong></p></td><td  ><p>$799</p></td><td  ><p>$22.99</p></td><td  ><p>$551.76</p></td><td  ><p>$791.52</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro</strong></p></td><td  ><p>$1,099</p></td><td  ><p>$31.99</p></td><td  ><p>$767.76</p></td><td  ><p>$1,007.52</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>$1,199</p></td><td  ><p>$34.99</p></td><td  ><p>$839.76</p></td><td  ><p>$1,079.52</p></td></tr><tr><td class="firstcol " ><p><strong>Apple Watch Series 11</strong></p></td><td  ><p>$399</p></td><td  ><p>$11.99</p></td><td  ><p>$287.76</p></td><td  ><p>$359.52</p></td></tr><tr><td class="firstcol " ><p><strong>Apple Watch Ultra 3</strong></p></td><td  ><p>$799</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td><td  ><p>$671.52</p></td></tr></tbody></table></div><p>As you can see, over two years, the price goes up by a few hundred dollars and in some cases exceeds the initial price of the iPhone or Apple Watch. </p><p>Yes, that would be the case if you weren't leasing an iPhone. AppleCare+ is a protection plan that you subscribe to a monthly or annual basis.</p><p>However, as mentioned, it may be more necessary for a leased device than one you own because of those potential damage fees. You could also be hit with upgrade fees or substantial termination fees if you try to end the lease early. </p><h2 id="what-about-trade-ins">What about trade-ins?</h2><p>Another factor against Apple's lease program is that, because you don't own your device, you won't get any credits for trading in your older device, which could lower your monthly payments to something lower than you would get from the Apple Upgrade program.</p><p>Let's take the iPhone 17 Pro as an example.</p><p>If you're upgrading from an iPhone 16 Pro, you could get as much as $560 in trade-in value, which would lower the cost to $22.45/month for 24 months.</p><p>If you were upgrading from an iPhone 15 Pro, you could get as much as $410 in trade-in value, which would lower your monthly bill to $28.70. </p><p>While you can trade in your current phone and get credit in the Apple Upgrade Program, it's a one-time thing, as you wouldn't own your phone from then on.</p><div ><table><caption>iPhone 17 Pro monthly fee</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Monthly fee/24 months</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Apple Upgrade Program</strong></p></td><td  ><p>$31.99</p></td></tr><tr><td class="firstcol " ><p><strong>Traditional financing (w/iPhone 16 Pro trade-in)</strong></p></td><td  ><p>$22.45</p></td></tr><tr><td class="firstcol " ><p><strong>Traditional financing (w/iPhone 15 Pro trade-in)</strong></p></td><td  ><p>$28.70</p></td></tr><tr><td class="firstcol " ><p><strong>Traditional financing (w/iPhone 14 Pro trade-in)</strong></p></td><td  ><p>$32.45</p></td></tr></tbody></table></div><h2 id="what-chatgpt-had-to-say">What ChatGPT had to say</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jN3EBZbAaLRko8gjF6Uj9h" name="ChatGPT on iPhone.jpg" alt="ChatGPT app on iPhone" src="https://cdn.mos.cms.futurecdn.net/jN3EBZbAaLRko8gjF6Uj9h.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>According to ChatGPT, the Apple Upgrade Program is not a rip-off, but it may not be the cheapest way for you to obtain an Apple device. </p><p>"For most people it's <strong>more expensive than buying and later selling or trading in the device</strong>. The biggest winner is Apple, because leasing encourages customers to stay on a continuous upgrade cycle," the AI said.</p><p>For those who keep their devices for three or more years not be a good deal, especially since Apple devices tend to retain their resale or trade-in value. Plus, the leasing program means that you don't own the device.</p><p>Interestingly, I actually prompted ChatGPT as well as Gemini and Claude and none of them mentioned AppleCare+ beyond noting that it is no longer bundled with the Apple Upgrade Program the way it was with the iPhone Upgrade plan.</p><p>Unless you upgrade annually or money isn't an issue for you, Apple Upgrade Program may not be the right fit for you. I'm a major proponent of owning your devices and this program doesn't let you do that until the end of the terms. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/is-your-old-fitness-tracker-good-enough-i-tested-a-5-year-old-fitbit-vs-apple-watch-series-11-on-a-5-500-step-walk-to-find-out">Is your old fitness tracker good enough? I tested a 5-year-old Fitbit vs Apple Watch Series 11 on a 5,500-step walk to find out</a></li><li><a href="https://www.tomsguide.com/phones/iphones/new-iphone-20-video-reveals-the-8-biggest-upgrades-to-expect-from-the-20th-anniversary-iphone">New iPhone 20 video reveals the 8 biggest upgrades to expect from the 20th anniversary iPhone</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-knew-better-than-to-carry-around-a-naked-phone-then-my-iphone-17-pro-max-met-the-asphalt">I knew better than to carry around a naked phone — then my iPhone 17 Pro Max met the asphalt</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tested Starlink-powered 4G on my phone — here's what actually happened in a dead zone ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/network-carriers/i-tested-starlink-powered-4g-on-my-phone-heres-what-actually-happened-in-a-dead-zone</link>
                                                                            <description>
                            <![CDATA[ Carriers around the world now offer plans with 4G satellite data when normal service isn't available. Curious as to what it was like, I drove into the sticks to find out what it was like. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kcLRdz8d3RPfh6VKGLoZAd</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7ZkrNW59zysDZ5wUTkqqHc-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 30 Jul 2026 13:55:05 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 13:55:11 +0000</updated>
                                                                                                                                            <category><![CDATA[Network Carriers]]></category>
                                                    <category><![CDATA[Internet]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/7ZkrNW59zysDZ5wUTkqqHc-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[4g connection over satellite on galaxy s26 ultra]]></media:description>                                                            <media:text><![CDATA[4g connection over satellite on galaxy s26 ultra]]></media:text>
                                <media:title type="plain"><![CDATA[4g connection over satellite on galaxy s26 ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7ZkrNW59zysDZ5wUTkqqHc-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/news/starlink-coverage-map-revealed-heres-where-people-are-using-the-service">Satellite-based internet</a> is nothing new, but the idea of getting satellite internet on your phone is something that has eluded us for a while. A number of smartphones now offer satellite connectivity of some kind, but that's mostly reserved for emergency situations, but the real question is, when will we be able to ditch cellular service and beam our mobile data from space?</p><p>Big tech has already been mulling over this idea for a while now. Elon Musk has <a href="https://www.reuters.com/business/media-telecom/musks-spacex-targets-us-consumers-with-starlink-mobile-service-push-ft-reports-2026-06-26/" target="_blank">talked about making</a> Starlink a direct-to-cell service. And just this week <a href="https://www.semafor.com/article/07/29/2026/spacex-looks-to-compete-with-the-carriers?utm_source=tldrnewsletter" target="_blank">Semafor</a> reported that SpaceX (the parent company of Starlink) may be looking to acquire spectrum at government auction to compete directly with AT&T, Verizon and T-Mobile. Or it may decide to acquire another wireless carrier altogether.</p><p>Meanwhile, <a href="https://www.ft.com/content/83e93ce0-1ebd-4b04-a70c-82ff7b64a5f4?syn-25a6b1a6=1#" target="_blank">Amazon</a> has filed an application to launch its own satellite-based internet service. Fortunately, we don't have to wait for the to get their act together, because carriers around the world have started offering satellite services to their customers.</p><p>Being the curious type, I decided to give one a go and see whether it was actually worth signing up for full time.</p><h2 id="how-satellite-4g-works">How satellite 4G 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="pcknePfYXoBQFhLBS55wTc" name="PXL_20260725_113038308" alt="4g connection over satellite on galaxy s26 ultra" src="https://cdn.mos.cms.futurecdn.net/pcknePfYXoBQFhLBS55wTc.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>Those reading this from the U.S. may be aware that T-Mobile <a href="https://www.t-mobile.com/coverage/satellite-phone-service" target="_blank" rel="nofollow">offers</a> a satellite service powered by Starlink. I live in the U.K., and naturally don't have access to T-Mobile, but the <a href="https://www.o2.co.uk/satellite" target="_blank" rel="nofollow">carrier O2</a> offers a similar service as an optional extra. This extra is also powered by Starlink, costs £3/$4 a month, and gives you access to satellite-based 4G should you find yourself without a cell signal or Wi-Fi connection.</p><p>That lack of additional connectivity is crucial to the whole process, because of the way modern smartphones connect to satellites. If there is another form of data connection, be it cellular or Wi-Fi, then the phone will refuse to look for a satellite. The satellite is essentially a last port of call to get your device connected.</p><p>This has led to some amusing instances of my phone looking for a satellite when there's zero chance of making a connection — such as when I was traveling several feet underground on the London Underground's Central Line. That's because I disconnected from cell service for more than a few seconds.</p><h2 id="finding-the-right-spot">Finding the right spot</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1198px;"><p class="vanilla-image-block" style="padding-top:65.19%;"><img id="4XSjScp6yJJWQk5Le2GCrP" name="Screenshot 2026-07-30 115658" alt="O2 4g coverage map south east" src="https://cdn.mos.cms.futurecdn.net/4XSjScp6yJJWQk5Le2GCrP.png" mos="" align="middle" fullscreen="" width="1198" height="781" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Blue is good, orange is ok and white is complete loss of service </span><span class="credit" itemprop="copyrightHolder">(Image credit: O2)</span></figcaption></figure><p>Surprisingly, the connectivity aspect actually caused a problem for me, because O2's outdoor 4G coverage is surprisingly good in my part of the country. There are plenty of areas in the U.K. that don't get any 4G cell signal, let alone 5G, but the <a href="https://www.o2.co.uk/coveragechecker" target="_blank" rel="nofollow"><u>official coverage map</u></a> shows they're mainly in very rural areas — notably mountainous regions of Wales, Scotland and Northern England. </p><p>I live in the South East, roughly around 40 miles from central London. Anyone from different parts of England will be well aware that this is the region where most of the money goes. So, even though I live in a village in a fairly rural area, the cell signal is remarkably robust when you're using an O2 SIM card.</p><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="RN9vc89cmMLEAeVzGni5ac" name="PXL_20260725_112402829" alt="4g connection over satellite on galaxy s26 ultra" src="https://cdn.mos.cms.futurecdn.net/RN9vc89cmMLEAeVzGni5ac.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>That's not to say 4G connectivity is universally available. There are various dead spots scattered around the place, according to both O2's own coverage checked and the <a href="https://www.ofcom.org.uk/mobile-coverage-checker" target="_blank">independent map </a>from mobile regulator Ofcom. </p><p>I just had to find one that intersected with a road, ideally one that had ample space to pull over and let me play on my phone. If you've had any experience with British country roads, you'll know that they're often too narrow to do this safely. </p><p>Thankfully, I found a spot roughly 30 minutes away by car. Not only is it a good-size deadspot, it also contains a pub with a sizable parking lot. There are certainly worse places to stop and test some new phone features.</p><h2 id="the-actual-connection-is-easy-and-automatic">The actual connection is easy and automatic</h2><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="JbFx5CXBHBPkkK9bMcwJac" name="PXL_20260725_112359792" alt="4g connection over satellite on galaxy s26 ultra" src="https://cdn.mos.cms.futurecdn.net/JbFx5CXBHBPkkK9bMcwJac.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>It took a couple of minutes to drive through the deadspot and park my car, by which point my Galaxy S26 Ultra had already connected to Starlink's satellites. That was rather surprising, considering that satellite connectivity typically needs a direct view of the sky to actually make the connection.</p><p>And no, before anyone asks, my car does not have a sun roof. It's totally solid, though I'm unsure of what materials were actually involved in its construction.</p><p>Admittedly, the signal wasn't particularly strong inside the car, illustrated as one bar out of three in the S26 Ultra's status bar. This doesn't change the fact that my phone was connected to the satellite through the car roof, and was receiving data from some Starlink satellite in 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:2240px;"><p class="vanilla-image-block" style="padding-top:60.27%;"><img id="T6xE2b5etvDVXGYGzfBHvS" name="Untitled-1 copy.JPG" alt="using 4g over satellite" src="https://cdn.mos.cms.futurecdn.net/T6xE2b5etvDVXGYGzfBHvS.jpg" mos="" align="middle" fullscreen="" width="2240" height="1350" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>My next move was to stick the phone out of my window and raise it up towards the sky. It took about a minute for the S26 Ultra to register that circumstances had changed, and there were no obstacles in the way — at which point the signal jumped up to two bars. </p><p>It never hit three bars, though, despite the fact I was in an open area with relatively clear skies. I should also note that moving inside the pub, a 350-year old building with a thatched roof, cut off all access to the satellite. So while the signal may be able to penetrate my car, it isn't magic.</p><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="dFWP6PdLdWD6JSDVZKJwZc" name="PXL_20260725_112408008" alt="4g connection over satellite on galaxy s26 ultra" src="https://cdn.mos.cms.futurecdn.net/dFWP6PdLdWD6JSDVZKJwZc.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>Accessing <a href="https://www.tomsguide.com/news/how-to-use-google-maps">Google Maps</a> from inside my car was a slightly drawn out affair. The app warned me that it was connected to the satellite, with lower loading times, and it took between 30 and 60 seconds for the actual map interface to load up fully. Shifting things outside and the load times were significantly reduced, though nowhere near as quick as they are with a 4G connection, let alone 5G.</p><p>So you're not going to be tapping your feet staring at your phone waiting for an all-important app to load over the course of several minutes. But your speeds aren't going to be as instantaneous as they might be with full bars of cell signal.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XjaEaO"></div>                            </div>                            <script src="https://kwizly.com/embed/XjaEaO.js" async></script><h2 id="this-isn-t-unrestricted-4g-like-you-re-used-to">This isn't unrestricted 4G like you're used to</h2><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="2TDkkh3fLyKXHCQzRu2qac" name="PXL_20260725_112542141" alt="4g connection over satellite on galaxy s26 ultra" src="https://cdn.mos.cms.futurecdn.net/2TDkkh3fLyKXHCQzRu2qac.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>It was a surprisingly effective system, though the main drawback is that there are limitations on the apps you're able to use. These limitations seem to have been coded in at a system level by your phone rather than by the carrier. My personal guess is that this is due to modern phones treating satellite connectivity as an emergency feature, rather than a stable source of data.</p><p>This means that you will only be able to use the bare minimum of apps you need to communicate, navigate and potentially allow yourself to be found in an emergency. We're talking about things like Google Maps, Google Find Hub, Messages and the weather. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q29W3qAJLdrTPZnNRuQriS" name="satellite1.JPG" alt="using 4g over satellite" src="https://cdn.mos.cms.futurecdn.net/Q29W3qAJLdrTPZnNRuQriS.jpg" mos="" align="middle" fullscreen="" width="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 latter may seem like an odd choice, but if you're out in the sticks by yourself with no vehicle or shelter, being able to keep tabs on the weather is essential. It could be the difference between you being stuck in a freak storm and finding somewhere to hunker down and ride it out in relative safety.</p><p>Your more frivolous apps, like social media and web browsers, are all disconnected and behave as though you don't have any active data connection. So don't expect to be sitting on a mountain somewhere catching up on your favorite Netflix series. That's not what this system is for, and the app straight up won't work if you try it.</p><p>Likewise, any third-party apps that could prove useful in precarious situations, such as mapping apps, still behave as though they are offline. The good news for wilderness-enthusiasts is that you can still get GPS with no data, but if assets haven't loaded, or are hilariously out of date, then the lack of data to update could end up being a problem.</p><h2 id="a-fantastic-backup-tool-but-it-s-not-replacing-cell-service-yet">A fantastic backup tool, but it's not replacing cell service yet</h2><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="kvmLGEA874pjyQVDihV5ac" name="PXL_20260725_112346025" alt="4g connection over satellite on galaxy s26 ultra" src="https://cdn.mos.cms.futurecdn.net/kvmLGEA874pjyQVDihV5ac.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 you live out in a deadspot, or regularly find yourself in one, then gaining satellite access through your carrier is not going to make up for the fact there's no cell signal. The limitations in what the satellite connection can or can't do means that it's not a true replacement for cell service in the way a full Starlink setup would be for home internet.</p><p>But this sure as heck beats being stuck with zero access to the internet. Carrier-supplied 4G may not be able to give you access to web browsers and streaming, but it keeps you hooked into the apps that you might actually need in a pinch. In short, it means that you will always be able to reach the outside world in the event that you desperately need to.</p><p>Some may not like the fact that it's getting harder and harder to disconnect, but this means that you won't be stuck in the middle of nowhere without support. The fact that satellite access still worked in my car, and loaded up Google Maps, will easily be a major boon for navigating areas with little to no cell service. Which isn't a bad deal for $4 a month (or $10 a month with T-Mobile).</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/i-turned-my-iphone-screen-completely-gray-for-two-weeks-heres-how-making-it-boring-helped-me-get-my-brain-back">I turned my iPhone screen completely gray for two weeks — here's how making it boring helped me get my brain back</a></li><li><a href="https://www.tomsguide.com/phones/i-shot-the-same-25-photos-with-a-usd329-budget-phone-and-usd1-199-flagship-heres-the-results">I shot the same 25 photos with a $329 budget phone and $1,199 flagship — here's the results</a></li><li><a href="https://www.tomsguide.com/phones/i-got-sick-of-buying-cases-for-my-phones-so-i-decided-to-3d-print-them-at-home-heres-what-happened">I got sick of buying cases for my phones, so I decided to 3D print them at home — here's what happened</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Fold 8 Ultra review: A major leap forward ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review</link>
                                                                            <description>
                            <![CDATA[ The Samsung Galaxy Z Fold 8 Ultra feels like an Ultra device, thanks to major upgrades to its screen, performance and battery life. However there are some glaring issues that can't be ignored. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">B9fVAp2B9gLCieHSUmMW7U</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XFoEma2UPNQx8BCVSrdP6F-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 30 Jul 2026 12:15: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.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/XFoEma2UPNQx8BCVSrdP6F-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[samsung galaxy z fold 8 ultra review images]]></media:description>                                                            <media:text><![CDATA[samsung galaxy z fold 8 ultra review images]]></media:text>
                                <media:title type="plain"><![CDATA[samsung galaxy z fold 8 ultra review images]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XFoEma2UPNQx8BCVSrdP6F-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung Galaxy Z Fold 8 Ultra is the start of something new, in a way that's a lot closer to how Samsung's non-folding phones have been operating for the past several years. Foldables are going Ultra, and it feels like Samsung is trying to push the idea that this isn't just a simple rebranding — there are some real changes behind the scenes.</p><p>There's more to new phones than adding flashier specs and bigger batteries, though, which is why I've been testing the Galaxy Z Fold 8 Ultra to see if it's really worthy of referring to itself as such. The good news is that this isn't just a boring incremental update with some new box art. The Z Fold 8 Ultra may share the same look as its predecessor, the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a>, but it actually feels like one of the more noteworthy upgrades to come out of Samsung for quite a few years.</p><p>Read on for our full Samsung Galaxy Z Fold 8 Ultra review.</p><h2 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-review-cheat-sheet"><span>Samsung Galaxy Z fold 8 Ultra review: Cheat Sheet</span></h2><ul><li><strong>What is it?</strong> The latest and best foldable to come out of Samsung, serving as a sequel to the Galaxy Z Fold 7 despite the addition of the Ultra branding.</li><li><strong>Who is it for?</strong> People who want the absolute best foldable experience possible, with the largest screen, and have the money to pay for it</li><li><strong>What does it cost? </strong>Prices start at $2,099 / £1,899 / AU$2,999 for a model with 256GB of storage and 12GB RAM. Release date is scheduled for August 7.</li><li><strong>What do we like? </strong>The Galaxy Z Fold 8 Ultra offers an incredible screen, that's brighter and less reflective than before, as well as powerful performance, good cameras, and the best battery life of any Galaxy foldable so far.</li><li><strong>What don't we like? </strong>Weak performance from the telephoto lens, the lack of S Pen stylus support, minimal design upgrades and the fact the price is $100 more than last year — marking the third consecutive Z Fold price hike.</li></ul><h2 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-review-specifications"><span>Samsung Galaxy Z Fold 8 Ultra review: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol " ><p><strong>Price</strong>    </p></td><td  ><p>From $2,099 / £1,899 / AU$2,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></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></tr><tr><td class="firstcol " ><p><strong>Chipset</strong>    </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 for 1TB)</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>200MP wide, 50MP ultra-wide, 10MP telephoto (3x optical)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover camera</strong>    </p></td><td  ><p>10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Main display camera</strong>    </p></td><td  ><p>10MP </p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong>    </p></td><td  ><p>45W wired / 20W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong>    </p></td><td  ><p>5,000 mAh</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></tr><tr><td class="firstcol " ><p><strong>Weight</strong>    </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></tr><tr><td class="firstcol " ><p><strong>Colors</strong>    </p></td><td  ><p>Violet shadow, Cream, Graphite, Violet Green (online exclusive)</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-review-the-ups"><span>Samsung Galaxy Z Fold 8 Ultra review:  The Ups</span></h2><h2 id="major-battery-life-gains">Major battery life gains</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2513px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="XqXqR7veof9Xv39t6m33WE" name="Galaxy Z Fold 8 Ultra review-17" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/XqXqR7veof9Xv39t6m33WE.jpg" mos="" align="middle" fullscreen="" width="2513" height="1414" attribution="" endorsement="" 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's foldables haven't always been known for their strong battery life, even as the flagship Galaxy S series pushes up our best phone battery life page. This year sees that change, and it's no doubt thanks to the larger 5,000 mAh battery pack. Not only is that the same size as the battery in the Galaxy S26 Ultra, it's also 600 mAh larger than the one in the Z Fold 7.</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 8</strong></p></td><td  ><p>12:19</p></td><td  ><p>70%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy 7 Fold 7</strong></p></td><td  ><p>10:44</p></td><td  ><p>54%</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>14:44</p></td><td  ><p>73%</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><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>During our custom battery life test, which involves web surfing over a 5G connection and setting the display to 150 nits of brightness, we recorded a battery life of 14 hours and 33 minutes. That's almost four hours more than the Z Fold 7 and more than two hours longer than the passport-shaped Galaxy Z Fold 8 and its 4,800 mAh battery. </p><p>However, it's not quite enough to match the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>, which scored 16 hours and 10 minutes, or the  14 hours and 44 minute battery life we recorded on the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-battery-life-test-results-are-in-and-it-sets-a-new-record-for-notebook-style-foldables">Motorola Razr Fold</a>.</p><p>During my time with the Z Fold Ultra, the battery seemed fairly strong, and I regularly went to sleep without plugging the foldable in to recharge overnight because I knew it would still be alive and kicking the very next morning. The faster 45W charging meant that I could plug the Ultra in while getting ready, comfortable in the knowledge that it would recharge enough to get me through the day.</p><p>Samsung promised that the Z Fold 8 Ultra could reclaim 67% battery after half an hour of charging, but we found the battery actually hit 76%. We're used to seeing recharge percentages differ from official figures by a percent or three, but it's rare that we see it go this far in the right direction.</p><p>On top of this, if you're more inclined to wireless charging, the upgraded Qi2.2 wireless charging protocol offers up to 20W speeds. That's up from 15W, but it does lag behind the likes of Apple and Google, who have offered 25W Qi2.2 speeds.</p><h2 id="major-league-performance">Major league performance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3389px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="NNgZruxjbXt4XgkfTXQG6F" name="Galaxy Z Fold 8 Ultra review-11" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/NNgZruxjbXt4XgkfTXQG6F.jpg" mos="" align="middle" fullscreen="" width="3389" height="1906" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>This year marks the first time that Samsung has used the custom "for Galaxy" chipset in a foldable phone. Normally Z Fold models are left with the standard flagship Snapdragon chip which, while no slouch, isn't as powerful as the Galaxy S-exclusive variant. This means that this year's benchmarking scores are a little higher than we initially anticipated.</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 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 8</strong></p></td><td  ><p>3,659/11,020</p></td><td  ><p>47.35/12,454</p></td><td  ><p>72242</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>2.711/9,134</p></td><td  ><p>35.12/9,413</p></td><td  ><p>59663</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><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>3,871 / 9,968</p></td><td  ><p>46.6 / 12,260</p></td><td  ><p>48549 (Quantitized Score ML/Neural Engine)</p></td></tr></tbody></table></div><p>Geekbench 6 benchmarking saw the Z Fold 8 Ultra's Snapdragon 8 Elite Gen 5 for Galaxy chip hit a score of 3,733 on single core testing and 11,457 on multi core tests . That's up from 3,052 and 9,735 on the Z Fold 7's Snapdragon 8 Elite chip. </p><p>Graphics performance, scored using the 3DMark Solar Bay Unlimited test, also rose by a noticeable amount with a score of 12,950 and average frame rate of 49.24 fps. The Z Fold 7 only scores 10,812 and 41.21 fps. Meanwhile Geekbench AI scored 71,715 to the Z Fold 7's 61,299. The Ultra's figures also thrashed the Motorola Razr Fold, though they do trail the Galaxy S26 Ultra by a small amount</p><p>The performance improvements were noticeable to some extent too. Playing PUBG Mobile and I found that the Z Fold 8 Ultra could handle the highest graphics and performance settings without suffering any ill-effects. What's more the phone could run through a game without noticeably heating up, which suggests Samsung is putting that extra power to use in the right place.</p><h2 id="even-brighter-and-more-reflective-display">Even brighter and more reflective 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: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.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="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The minimized crease might be one of the main talking points for the Galaxy Z Fold 8 Ultra, but that's not the only upgrade Samsung has on offer. The Ultra now boasts an even brighter display, rated to output up to 3,000 nits of brightness, paired with a new anti-reflective coating. This means that the phone is supposed to be able to handle extremely bright conditions better than ever before.</p><p>Our testing showed that the Z Fold 8 Ultra was able to hit a maximum of 2,687 nits, which is a little bit lower than Samsung promised, but is par the course for how these things tend to go. Crucially, though, this actually makes the Z Fold 8 Ultra the brightest phone we've ever tested, narrowly beating out the current title-holder the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Google Pixel 10 Pro XL</a> — which we measured at 2,555 nits.</p><p>It's well ahead of the Z Fold 7's 2,245 nits, and leagues ahead of the 1,281 nit peak we recorded when testing the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a>.</p><p>Obviously big numbers are good, but they're worthless if they don't get put into practice. Thankfully the Z Fold 8 Ultra does put its money where its mouth is. We're currently experiencing an abnormally long period of clear skies and sunny weather here in the U.K., which is ideal for testing the capabilities of bright, anti-reflective screens. </p><p>Not only am I able to use the Galaxy Z Fold 8 Ultra in direct sunlight without issue, the screen is bright and clear enough that I can still see exactly what I'm doing while wearing sunglasses. That wouldn't have been the case three or four years ago.</p><h2 id="mostly-great-cameras">(Mostly) great 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: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.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>Seeing as how it includes the 200MP main camera lens from the S26 Ultra and Z Fold 7, alongside a new 50MP ultrawide angle camera, it's no surprise that the Galaxy Z Fold 8 Ultra takes some pretty great photos. Provided, of course, that you know which lens to utilize. </p><iframe allow="" height="400" 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=68d559d2-8b0d-11f1-ba1b-0e6f42328d7d"></iframe><p>The 200MP main lens really shines when compared to the iPhone 17 Pro Max — which is one of the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phones</a> you can buy right now. While both phones manage to capture true to life colors in good quality, the Z Fold 8 Ultra seems to have picked up a clearer and sharper image than the iPhone. That's especially true if you zoom in a little bit and look at all the smaller details.</p><p>Both phones seemed to take issue focusing on one of my dogs, though, and this is not the first time this has happened during camera testing. Once is an accident, but multiple instances of this make me wonder whether camera phones just hate my pooch.</p><iframe allow="" height="400" 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=150fb8d2-8b0e-11f1-ba1b-0e6f42328d7d"></iframe><p>At first glance the ultrawide angle photography doesn't look all that different, but look closely and you can see how the Z Fold 8 Ultra is taking advantage of the various upgrades — the most prominent of which is the 50MP resolution bump. The details on the church are a lot  sharper than on the Z Fold 7, and you can pick out the smaller details without them merging into a washed out jumble of barely-describable details.</p><iframe allow="" height="400" 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=df977e1a-8b0d-11f1-ba1b-0e6f42328d7d"></iframe><p>Close-up macro-style shots are similar, though both phones seemed to struggle to focus on the berries directly in front of it. However, I will say that in light of those focus issues, telling them apart isn't that easy.</p><iframe allow="" height="400" 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=fb3ab7c2-8b0d-11f1-ba1b-0e6f42328d7d"></iframe><p>Low light photography has made some considerable improvements, with the Galaxy Z Fold 8 Ultra gaining access to the ProVisual engine and Advanced AP-based image processing — just like the Galaxy S26 Ultra. While the Z Fold 8 Ultra's low-light photos might look slightly darker than the Z Fold 7, they're capturing a heck of a lot more detail in the process. </p><p>You get a much clearer view of the various details in almost every aspect of the photo. The patchy coloring on the church's brickwork is clearer, while the individual stone decorations are sharper and considerably less fuzzy on the Z Fold 8 Ultra. Even the leaves on the trees can be picked out, rather than forming a giant green mass.</p><iframe allow="" height="400" 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=3d5f6086-8b0d-11f1-ba1b-0e6f42328d7d"></iframe><p>The iPhone 17 Pro Max definitely wins on the selfie front, and there's absolutely no contest. The Z Fold 8 Ultra's 10MP cameras just don't capture the same level of detail as Apple's front camera, and the lens-angle is a lot smaller so you end up capturing significantly less. Then again, both phones managed to hone in on the fact that I have a baby and haven't had anything like enough sleep in the nine months since he was born.</p><p>Honestly, while the Ultra's selfie camera isn't terrible, it's also nothing to brag about. To the point where you're probably better off using the 200MP main camera to snap selfies with the help of the cover display viewfinder.</p><iframe allow="" height="400" 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=1fddabb2-8b0d-11f1-ba1b-0e6f42328d7d"></iframe><p>When it comes to portrait mode, it feels like these are from two completely different points in time, rather than being snapped within seconds of each other. I'm not a fan of either photo, to be honest, but the iPhone 17 Pro Max still comes out ahead of the Z Fold 8 Ultra. It's a slightly clearer image, noticeably brighter, and captures a wider view of the world.</p><p>I'm not impressed with the bokeh in either photo, to be honest, since both phones struggled to handle the fact my hair was being whipped around by the wind at the time.</p><p>We haven't touched on the quality of the telephoto lens yet, but the truth is that the quality of those photos is so bad that I had to discuss them more in depth below.</p><h2 id="helpful-ai-features">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:2951px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pKiVXcRJLTdYqY4LkYZS7W" name="Galaxy Z Fold 8 Ultra review-14" alt="samsung galaxy z fold 8 ultra review now nudge screen" src="https://cdn.mos.cms.futurecdn.net/pKiVXcRJLTdYqY4LkYZS7W.jpg" mos="" align="middle" fullscreen="" width="2951" height="1660" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>AI is a core part of the modern Galaxy experience, and the Z Fold 8 Ultra is no exception to this — though Samsung hasn't added as many features as you might have expected. The main one is the introduction of Now Nudge, a contextual AI tool that's capable of pulling up pieces of information whenever it feels you might need it — such as during phone calls or while browsing emails.</p><p>The Z Fold 8 Ultra ups the ante by blending Now Nudge with multitasking. This means you can tap on your nudged prompts and open up the relevant apps in split-screen mode, and keep your existing window open. The addition of Ambient Nudge also makes the whole process a lot more subtle, surfacing those contextual prompts at the bottom of your screen rather than with an in-your-face notification.</p><p>However my favorite new feature is <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">MyFanCam</a>, which takes your existing videos and lets you hone in on a single person and turn them into the main character. It works with all videos you've shot, even those not filmed on a Galaxy phone, and so far I haven't found a single video featuring human beings that it doesn't like. </p><p>The same can't be said for animals, though, and I found that the AI refused to acknowledge that you may want to focus your video on them.</p><h2 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-review-the-downs"><span>Samsung Galaxy Z Fold 8 Ultra review: The Downs</span></h2><h2 id="no-s-pen-or-magnets">No S Pen or magnets</h2><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.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>The main issue I have with the Galaxy Z Fold 8 Ultra is that the design hasn't changed in any meaningful way since last year. It's not identical to the Z Fold 7, as I discovered when trying to use one of last year's cases on the Ultra model, but it's close enough that you wouldn't be able to tell without some well-calibrated measuring tools.</p><p>This naturally means that the design choices people didn't like about the Galaxy Z Fold 7 have stuck around for another generation. My personal pet peeve is that the phone still doesn't offer magnetic wireless charging without a case, despite offering Qi2 technology. It's an issue exacerbated by the fact Samsung originally said it was avoiding  Qi2 magnets because they interfered with the S Pen stylus. </p><p>Though that excuse doesn't really hold weight considering the Z Fold 8 Ultra doesn't have S Pen support either. That controversial change happened last year because Samsung removed the crucial digitizer layer to reduce thickness. Samsung has confirmed that it is <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">exploring alternative options</a>, but that doesn't change the fact the stylus is a glaring absence from this phone.</p><p>Using the Z Fold 8 Ultra and you can feel its absence. It feels like something is missing when you're using the large screen, and it's a void the stylus would have helped to fill.</p><h2 id="awful-telephoto-performance">Awful telephoto performance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2546px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YoMrDg2aP5YQwYU9rTB4VE" name="Galaxy Z Fold 8 Ultra review-LIST3" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/YoMrDg2aP5YQwYU9rTB4VE.jpg" mos="" align="middle" fullscreen="" width="2546" height="1432" attribution="" endorsement="" 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 Z Fold 8 Ultra's camera quality may be pretty good compared to its rivals, there's no denying the fact that the telephoto lens is not doing a good job. The 10MP telephoto lens pales in comparison to the other two cameras, and bumping the magnification up makes it look considerably worse.</p><p>Even jumping up to 3x, the maximum level of optical zoom afforded by the lens, and you can see just how poor these photos actually are. Push it up even further and it feels like you might not have bothered taking the photos at all.</p><iframe allow="" height="400" 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=57b402f6-8b0e-11f1-ba1b-0e6f42328d7d"></iframe><p>These 3x pictures of berries growing near my house aren't terrible at first glance, but when you compare them to the 50MP telephoto lens on the Galaxy S26 Ultra and you can see that Samsung really dropped the ball with this particular bit of hardware.</p><iframe allow="" height="400" 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=6f308832-8b0e-11f1-ba1b-0e6f42328d7d"></iframe><p>The 10x zoomed photos of a local cat are even worse, to the point where I'm starting to wonder whether it was worth trying to zoom in at all. Samsung really needs to do a lot better, because the weak telephoto performance is weighing the rest of the cameras down — which is far from ideal when you have the 200MP main lens.</p><h2 id="another-100-price-hike">Another $100 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:3195px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="qXG8pNj9Zx45vEbwAzbc6F" name="Galaxy Z Fold 8 Ultra review-21" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/qXG8pNj9Zx45vEbwAzbc6F.jpg" mos="" align="middle" fullscreen="" width="3195" height="1797" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The biggest issue that we can't ignore is the fact that Samsung has raised the price of its flagship foldable by $100 for the third consecutive year. This means that the starting price is now $2,099 for a Z Fold 8 Ultra with 256GB of storage and 12GB of RAM. That price rises to $2,299 for a 512GB model and $2,699 for a 1TB model with 16GB of RAM.</p><p>It's no secret as to why this is happening. RAMageddon has pushed up the price of memory and storage to unprecedented levels, all while the overall cost of phone manufacturing has been rising over the past few years. A phone as difficult to mass produce as a foldable already commands a high price tag, but Samsung has clearly decided that the old prices still aren't high enough.</p><p>So while the new "Ultra" designation does come with a bunch of great upgrades, it doesn't change the fact that you're paying out of your nose for them.</p><p>Perhaps worst of all, Samsung isn't offering its usual "double storage" pre-order bonus this time, nor are there any other incentives to take advantage of. That means there isn't really a benefit to ordering early, unless you're absolutely desperate to get your hands on the Z Fold 8 Ultra as soon as possible.</p><h2 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-review-verdict"><span>Samsung Galaxy Z fold 8 Ultra 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:3352px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="GssiGQ7DwqV2epoxPbvf6F" name="Galaxy Z Fold 8 Ultra review-20" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/GssiGQ7DwqV2epoxPbvf6F.jpg" mos="" align="middle" fullscreen="" width="3352" height="1885" attribution="" endorsement="" 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 would have been really easy for Samsung to roll out the Galaxy Z Fold 8 Ultra with the usual weak-sauce upgrades, slap on the new name and call it a day. But that's not what's happened here, and while the phone may be imperfect, a lot of effort seems to have gone into making sure this is an upgrade worthy of the Ultra name.</p><p>Battery and performance have made huge leaps forward, to the point where it doesn't feel as though Samsung is deliberately holding back and limiting the foldable's capabilities in comparison to its non-folding counterparts. There's still some catching up to do in this regard, but it's certainly a big step forward. Likewise the improvement in screen technology is a massive win for users, especially those that live in spots with a lot of sun.</p><p>Of course there are a bunch of things Samsung should have anticipated would be a problem. Telephoto quality is appalling for a phone that costs this much, and the missing S Pen is still very noticeable. Worst of all is the increased price, which is just the latest in a long time of Galaxy price increases, and those basic flaws make it sting even harder.</p><p>Overall the Z Fold 8 Ultra is a great addition to the Galaxy Foldable lineup, but that doesn't mean Samsung should get complacent and let the innovations stagnate ahead of 2027's inevitable Z Fold 9 Ultra.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The tech world hyped up the Galaxy Z Fold 8's 'crease-free' display — here's a reality check after 7 days ]]></title>
                                                                                                                                                                                                <link>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</link>
                                                                            <description>
                            <![CDATA[ The Samsung Galaxy Z Fold 8 display looked flawless for the first 36 hours, but after just 7 days of use, the crease is back. See the photographic proof. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4y3sWgJA7HXsgsPQJda2UK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/eMykzuMeNevgMvexw4ydne-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 30 Jul 2026 11:39:47 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 20:15:46 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/eMykzuMeNevgMvexw4ydne-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/eMykzuMeNevgMvexw4ydne-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A few days ago, I wrote that 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>'s crease practically disappeared in daily use. Samsung's new titanium alloy film and reinforced back plate seemed to have solved the foldable world's biggest annoyance. I was impressed. </p><p><a href="https://www.tomsguide.com/phones/samsung-phones/my-first-36-hours-with-the-samsung-galaxy-z-fold-8-i-was-wrong-about-the-passport-screen-but-that-usd1-899-price-still-stings">But that was day 1</a>. Welcome to day 7.</p><p>I thought I was gaslighting myself into seeing more of a crease in my day-to-day (and in the photos from our review). But I'm not going crazy — after seeing validation on X/Twitter, turns out wear and tear <em>does catch up to this thing</em>.</p><div class="see-more see-more--clipped"><blockquote class="twitter-tweet hawk-ignore" data-lang="en"><p lang="en" dir="ltr">Ten sam #GalaxyZFold8Zdjęcie nr 1: po wyjęciu z pudełkaZdjęcie nr 2: po paru dniach używania Czytaj bruzdy nie ma tylko pierwszego dnia 🫠👌 pic.twitter.com/BhnJHUqP7S<a href="https://twitter.com/cantworkitout/status/2082186881920385130">July 28, 2026</a></p></blockquote><div class="see-more__filter"></div></div><h2 id="the-7-day-reality-check">The 7-day reality check</h2><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="6bxGdiam3BDqcSojZNdkyR" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/6bxGdiam3BDqcSojZNdkyR.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>A week of daily driving, big-screen use in between sets at the gym, web browsing and TikTok scrolling has taken its toll. Folding a screen, no matter how creaseless, will make a crease after 168 hours.</p><p>So what happened? From my years of testing all kinds of foldable displays, one thing has always become clear: nobody can defeat the law of physics.</p><p>When you first pull the Z Fold 8 out of the box, the ultra-thin glass and additional protective layers are fresh, pulling completely taut across the hinge. But after a week of real-world use — folding and unfolding it a hundred times a day, letting the device heat up during intense multitasking and stuffing it into tight pockets — I believe those display layers undergo mechanical fatigue.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2682px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="4RtoBDsrwS8sGu7dtM78Xh" name="Galaxy Z Fold 8 review-LIST1" alt="Samsung Galaxy Z Fold 8 shown open on a stone bench" src="https://cdn.mos.cms.futurecdn.net/4RtoBDsrwS8sGu7dtM78Xh.jpg" mos="" align="middle" fullscreen="" width="2682" height="1509" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Engineers call it <a href="https://www.sciencedirect.com/topics/engineering/plastic-deformation" target="_blank">"plastic deformation."</a> The continuous stress of bowing into the hinge's teardrop cavity, combined with the heat of the device, causes the materials to lose their factory-fresh tension. They slowly begin to settle into the mechanical trench underneath the display.</p><p>That titanium alloy film and back plate may be stronger, but that screen still has to obey the mechanical reality of being folded in half. And the result is that by the end of week one, that invisible crease will settle into a visible rut.</p><p>I've seen this happen to every foldable — be it the <a href="https://www.tomsguide.com/phones/android-phones/honor-magic-v6-hands-on-review">Honor Magic V6</a>, <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Google Pixel 10 Pro Fold</a> or <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-ultra-2025-review">Motorola Razr Ultra</a>.</p><h2 id="how-bad-is-it-actually">How bad is it actually?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3451px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xZsjHaJtbzrYXaZVDzajdZ" name="Galaxy Z Fold 8 review-19" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/xZsjHaJtbzrYXaZVDzajdZ.jpg" mos="" align="middle" fullscreen="" width="3451" height="1941" attribution="" endorsement="" class="inline"></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 short: <strong>it's not.</strong></p><p>Let me be completely clear here. This is not a bad phone because of a display crease. In fact, this passport-size form factor won me over compared to the taller options — being much more pocketable and a better aspect ratio for content consumption.</p><p>That being said, a lot of journalists have been quick to describe the display as being "virtually crease-free" (even though Samsung never said that itself). So let's go deeper on this reality check.</p><p>The feel of it remains unchanged both before and after the trench deepened. You can subtly feel it with your finger whether the display tension is there or not. So this is definitely just a visual thing you'll notice when the screen catches a glare.</p><p>And speaking of the glare, while that anti-reflective coating is great, I feel it almost highlights the crease <em>more </em>when held against a harsh light source (like a sunlit window) because the distortion in the reflection becomes more obvious.</p><h2 id="the-1-899-question">The $1,899 question</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xc3WRniTc8DtiEFDN5rGqC" name="Galaxy Z Fold 8 in hand" alt="Samsung Galaxy Z Fold 8 in hand" src="https://cdn.mos.cms.futurecdn.net/xc3WRniTc8DtiEFDN5rGqC.jpg" mos="" align="middle" fullscreen="" width="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, is this a dealbreaker? If you're paying nearly $2,000 for a premium device, it's fair to expect premium longevity. However, I'll go out on a limb and say <strong>it's not as big of a problem as you think.</strong></p><p>The Z Fold 8 is still a fantastic foldable with a form factor that I love. And to Samsung's credit, the crease is definitely less noticeable now than it's been on the company's previous phones. But with the "crease-free" word on the street, it's only fair that I make it clear that this is a temporary illusion, not a permanent feature.</p><p>That being said, I'm just one person spouting my thoughts. I'd love to know what you think. Let me know below — are you planning to pick up the Z Fold 8?</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqRMmX"></div>                            </div>                            <script src="https://kwizly.com/embed/OqRMmX.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/i-shot-the-same-25-photos-with-a-usd329-budget-phone-and-usd1-199-flagship-heres-the-results">I shot the same 25 photos with a $329 budget phone and $1,199 flagship — here's the results</a></li><li><a href="https://www.tomsguide.com/phones/i-got-sick-of-buying-cases-for-my-phones-so-i-decided-to-3d-print-them-at-home-heres-what-happened">I got sick of buying cases for my phones, so I decided to 3D print them at home — here's what happened</a></li><li><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">I took the Galaxy Z Fold 8 Ultra vs Fold 7 outside — and the difference is so drastic people think I faked the results</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I shot the same 25 photos with a $329 budget phone and $1,199 flagship — here's the results ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/i-shot-the-same-25-photos-with-a-usd329-budget-phone-and-usd1-199-flagship-heres-the-results</link>
                                                                            <description>
                            <![CDATA[ Does having a flagship phone have a substantially better camera performance than a budget one? I put the TCL NXTPAPER 70 Pro and iPhone 17 Pro Max to the test. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">7y8G9MxvNRViyfLxCEkh7k</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/78jJPxXbi6kK8vDgGjSiFT-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 29 Jul 2026 12:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 14:28:44 +0000</updated>
                                                                                                                                            <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/78jJPxXbi6kK8vDgGjSiFT-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[TCL NXTPAPER 70 Pro vs Apple iPhone 17 Pro Max.]]></media:description>                                                            <media:text><![CDATA[TCL NXTPAPER 70 Pro vs Apple iPhone 17 Pro Max.]]></media:text>
                                <media:title type="plain"><![CDATA[TCL NXTPAPER 70 Pro vs Apple iPhone 17 Pro Max.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/78jJPxXbi6kK8vDgGjSiFT-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Ask almost anyone why they upgrade their phone, and you’re likely to get this answer: the camera. We’ve been conditioned to believe that if you want rich colors, sharp details, and crisp low-light shots, you need to shell out four figures for the latest flagship. In contrast, even the <a href="https://www.tomsguide.com/best-picks/best-cheap-phones">best cheap phones</a> carry the stereotype of taking cheap-looking photos that look awful as physical printouts.</p><p>However, the dynamics have changed because people are mostly sharing photos on social media. The canvas where they’re shown remains small, so those deficiencies don’t look as glaring. Yet, the price gap between budget and ultra-premium handsets has never felt wider — and this <a href="https://www.tomsguide.com/phones/i-used-tcl-nxtpaper-70-pro-mwc-2026">TCL NXTPAPER 70 Pro</a> vs. <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> photo shoot out is further proof.</p><p>To put this assumption to the test, I took these two wildly different devices into real-world situations to see what, if any, meaningful differences there are in their camera performance. There’s the $329 TCL NXTPAPER 70 Pro, which boasts an attractive price, while the $1,199 iPhone 17 Pro Max is considered the <a href="https://www.tomsguide.com/best-picks/best-phones">best phone</a> out there for good reason.</p><p>Is the flagship truly four times better, or are affordable cameras finally catching up to the point of diminishing returns? Here’s what I found.</p><h3 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-camera-specifications"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Camera specifications</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>TCL NXTPAPER 70 Pro</strong></p></td><td  ><p><strong>iPhone 17 Pro Max</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$329</p></td><td  ><p>$1,199</p></td></tr><tr><td class="firstcol " ><p><strong>Main Camera</strong></p></td><td  ><p>50MP</p></td><td  ><p>48MP (f/1.78)</p></td></tr><tr><td class="firstcol " ><p><strong>Ultrawide</strong></p></td><td  ><p>8MP</p></td><td  ><p>48MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Telephoto</strong></p></td><td  ><p>N/A</p></td><td  ><p>48MP (f/2.8) with 4x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie</strong></p></td><td  ><p>32MP</p></td><td  ><p>18MP (f/1.9)</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-1"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 1</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/zNZyWSVMt2cwDJqFYydhZY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/t3znCeePq6tVLNAENbDq2d.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>At first glance, there don’t appear to be any noticeable differences, especially in how the scene is exposed. But upon closer inspection of the facade of Moynihan Train Hall on the right, it’s pretty apparent that the iPhone 17 Pro Max’s ultrawide captures more detail and definition.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OoDnqX"></div>                            </div>                            <script src="https://kwizly.com/embed/OoDnqX.js" async></script><h3 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-2"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 2</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ecQBR96c8CpttdYGPteELY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QufXVyYykJD3khxmFdQazc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Switching over to their main cameras, I will say that the TCL NXTPAPER 70 Pro’s 50MP sensor does just as good a job of capturing some of the finer details — like the Sabrett hot dog stand and the pizza shop sign in the far background.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X7AKnW"></div>                            </div>                            <script src="https://kwizly.com/embed/X7AKnW.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-3"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 3</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7x9ppb7JSH9pyJYRbRacPX.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/d5V6KCLv7G9ELK2YtRiwwc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>All zooming is done by the NXTPAPER 70 Pro’s main camera, which means it relies heavily on sensor cropping at 10x digital zoom. As a result, it can’t match the optical performance of the iPhone 17 Pro Max’s dedicated telephoto shooter when capturing the water tower.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WlMxDO"></div>                            </div>                            <script src="https://kwizly.com/embed/WlMxDO.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-4"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 4</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/PL7wx2ikpSmtsR7pHC5nWY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XKbvN2FdNqLVZqcFJEZL3d.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>I’m immediately drawn to the warmer color temperature of the iPhone 17 Pro Max’s shot, which features this art installation smack in the middle. Besides that, the TCL NXTPAPER 70 Pro pulls off just as good a composition — though the colors are slightly muted.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W3KoVW"></div>                            </div>                            <script src="https://kwizly.com/embed/W3KoVW.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-5"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 5</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/qHfA9erDsUX8hDhGYkbrcY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/V2LvkyFQUwtB3t3FukHH4d.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>I can say the same thing about the shots taken with their main cameras. While the iPhone 17 Pro Max pulls in more detail upon closer inspection, the TCL doesn’t look whole lot different when I look at the overall shot.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WVowqO"></div>                            </div>                            <script src="https://kwizly.com/embed/WVowqO.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-6"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 6</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Gkp4eTxYHM75eG36QMnTzX.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xbgWXLQhiavzT8xTm8ew2d.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>The tighter framing from the 10x zoom really exacerbates the TCL NXTPAPER 70 Pro’s softer details and definition compared to the iPhone. The face looks smudgy, giving it a watercolor effect, while the iPhone’s shot is more distinct with sharper edges visible. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e47RMX"></div>                            </div>                            <script src="https://kwizly.com/embed/e47RMX.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-7"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 7</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/HJhGYcFQ3vEwKFqzEsTgGX.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ubwn2u7SexG8RcBzkzJ6yc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Low light is where there’s a dramatic difference between these two phones. The iPhone 17 Pro Max’s night mode delivers a brighter picture in near-total darkness, while doing a much better job of preserving the orange color of the SUV in the driveway.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O92l2X"></div>                            </div>                            <script src="https://kwizly.com/embed/O92l2X.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-8"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 8</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/KEsxtv6VcNtFZSuBJjwY7X.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Ha56Yd4rCngnHzYCEaXLxc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Despite having a night mode, the TCL simply cannot match the light-gathering abilities of the iPhone. As a result, the home’s facade appears as a silhouette with virtually no visible detail. In contrast, the iPhone exposes the house properly, and I love how it even draws out stars in the night sky.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eAAp4e"></div>                            </div>                            <script src="https://kwizly.com/embed/eAAp4e.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-9"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 9</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/tDGrZCruTnQijNjBJkBh6X.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kVDEihojNCN2K2XWHihdzc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>It looks like I was shooting blind with the TCL based on what it attempted to capture in night mode with this tree. The only visible details are the windows surrounded by the home's exterior lights, whereas the iPhone makes it look like ambient light is gently illuminating the entire tree.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WQwpyX"></div>                            </div>                            <script src="https://kwizly.com/embed/WQwpyX.js" async></script><h3 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-10"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 10</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/38YyCH9C9k3D2frmK4EXfX.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iXXAvU42bXRSpZXdyr7c4d.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>When there’s some ambient light in a nighttime scene, the TCL does a better job of exposing the shot. I’m surprised by how much better this tree looks, which is thanks to the ambient light coming from the left — though the image is still nowhere as good as the iPhone’s.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eG2pwX"></div>                            </div>                            <script src="https://kwizly.com/embed/eG2pwX.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-11"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 11</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/bFujfpeMncgpwCdHT8EvyX.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/siu2ohASz97XffwFwyKCyc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Indoors, where there’s still decent lighting, the TCL’s main camera manages to capture a similar shot to the iPhone’s — albeit with slightly less contrast. Most people might not notice it, but it’s visible in the dark sections surrounding the neon sign.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ev135X"></div>                            </div>                            <script src="https://kwizly.com/embed/ev135X.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-12"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 12</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vFukFRQfVwBPmYC6XBPfxY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zVQbfhnJy9mXYvgJydu66d.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>With more shade around this courtyard, the iPhone 17 Pro Max’s warmer color temperature isn’t as prevalent. Both phones do a nice job balancing the exposure throughout the scene, but the TCL's highlights are a little blown out — notice how some parts of the blue sky appear washed out and white.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X857ye"></div>                            </div>                            <script src="https://kwizly.com/embed/X857ye.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-13"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 13</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/4SnUVfatdbHdsnnPy6Lw3Z.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/qdug3fL6P3HpEmw5UyXM7d.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>What’s immediately apparent is that the TCL has a slightly tighter field of view with its main camera, but it still manages to match the iPhone’s overall look in this courtyard shot. Luckily, the highlights aren’t blown out this time.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XkwMMX"></div>                            </div>                            <script src="https://kwizly.com/embed/XkwMMX.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-14"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 14</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/wsxpFLrGC9i3ZeBmsKQTyY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WcwWMPxi33cwpnqpeXro6d.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>At first glance, I’m drawn to the TCL’s closeup of this wooden ring — but that begins to change the more I inspect the details. It becomes clear that TCL’s adding a substantial amount of sharpening, but the downside is how it looks more artificial the more I took in. In contrast, the iPhone has superior definition.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xr0dxW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xr0dxW.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-15"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 15</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ANmVKxaNhvM2FbgTYAYGHY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JCuYDU6RZAGdyGr5CsBjyc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>While the iPhone 17 Pro Max can get a lot closer for macro shots, the TCL NXTPAPER 70 Pro does an excellent job of capturing the sunflower at the same distance. The over-sharpening effect is a huge benefit here, which makes all the details pop out. In fact, I’d say it captures the same level of detail and definition as the iPhone — but with slightly less muted color.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLqpNX"></div>                            </div>                            <script src="https://kwizly.com/embed/OLqpNX.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-16"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 16</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/hVE2SR5cVjKXTZyrcQHLrY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/VXwyihAdLPefckBmtiZnrc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>This is a perfect example of how the iPhone 17 Pro Max’s 48MP ultrawide camera has a big advantage over the TCL’s 8MP sensor. Even though the overall shot matches the iPhone in nearly every other respect, the NXTPAPER 70 Pro simply can’t capture the same level of detail. As a result, the crisp outline of the Porsche Macan Turbo Electric isn’t nearly as well defined. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEqpze"></div>                            </div>                            <script src="https://kwizly.com/embed/eEqpze.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-17"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 17</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/4gEczfRzYjLvQxEq9VA6cY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/7pBufoXqpU4UunLJyfNP4d.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>There’s nothing wrong with the TCL here — in fact, it actually brightens the scene slightly more than the iPhone. That isn't much of a surprise given how ideal the lighting conditions are. The only minor difference emerges when I zoom in on the finer details: the Porsche’s finish appears a bit speckled on the TCL, though it’s still far from bad.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePap1W"></div>                            </div>                            <script src="https://kwizly.com/embed/ePap1W.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-18"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 18</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/doLzj33PAsdwT86nB7PnwY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6BU898z6nnESXqCXThud4d.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>At 2x zoom, we see similar results in this shot of the Porsche, with the TCL rendering the scene a smidge brighter. However, the iPhone 17 Pro Max’s image processing makes the SUV's edges and fine details look significantly more defined. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-egKAje"></div>                            </div>                            <script src="https://kwizly.com/embed/egKAje.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-19"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 19</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/WwfoNfhBEdZT4JbXpouXyX.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jWm3KjXTTXsrEgfzqLnKzc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Focusing on the Porsche at 10x zoom, there’s no arguing the iPhone’s superiority as it pulls in significantly more detail. For example, I can clearly make out the markings on the tire, and the headlights and air vents are far better defined.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYdjZO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYdjZO.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-20"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 20</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/bFv6S5kKrto9d7C9cknCRY.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YUfpFuLPzTh6tVWmrh6Yzc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>With the sun high in the sky and illuminating the clouds, this serves as a great test for these cameras' dynamic range performance. I actually prefer the TCL's shot here, as it balances the shadows and highlights better. Take a look at the asphalt compared to how it’s slightly underexposed by the iPhone 17 Pro Max.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ey49bX"></div>                            </div>                            <script src="https://kwizly.com/embed/ey49bX.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-21"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 21</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/qmSaLWUYwrTNPeMjWg5U2Y.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6KyEKD3KdxswnyxZTKbByc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Right away, you'll notice that the iPhone 17 Pro Max offers a much wider field of view for selfies. More importantly, it does a far better job of handling the harsh light hitting my shirt — whereas the TCL leaves those bright areas looking washed out. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ONqpmW"></div>                            </div>                            <script src="https://kwizly.com/embed/ONqpmW.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-22"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 22</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/RbPEmQjiHEeWtrhTfVxw5Y.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QU8e6pLXnZAU7S7g6iqcic.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>While the TCL NXTPAPER 70 Pro has an overwhelming advantage on paper with its 32MP front camera, the iPhone 17 Pro Max’s 18MP Center Stage camera does almost as good a job of capturing the fine details of my face and outfit. Thankfully, the TCL doesn’t suffer from any overexposure here, and it actually captures a bit more definition in my facial features.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqR0ZX"></div>                            </div>                            <script src="https://kwizly.com/embed/OqR0ZX.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-23"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 23</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/tsrCiC6J8tbVF7r5QY9hhX.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/azGwLi57kGDyZR4JGXkazc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>I really like how both phones handle portrait mode here. In fact, they add just enough background blur to keep the focus squarely on me. However, the iPhone 17 Pro Max’s shot looks more realistic in the way the bokeh behaves — you can see a natural, progressive falloff in focus starting along the arm extending toward the camera. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eJqpvX"></div>                            </div>                            <script src="https://kwizly.com/embed/eJqpvX.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-24"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 24</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Nx5euKcKsqmJyGPpFkpEcX.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ZKDaDGiPcX9VkupCUpWyxc.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Strong light is coming from the window in the background, causing the TCL to overcompensate by brightening the shadows — which leaves the cat’s black fur looking somewhat milky. The iPhone 17 Pro Max adapts much better to the scene by maintaining strong contrast on the cat without blowing out the highlights or washing out the rest of the shot.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XpoR8O"></div>                            </div>                            <script src="https://kwizly.com/embed/XpoR8O.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-photo-25"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: Photo 25</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ubsBWgUKVtHen8BbJ29iXX.jpg" alt="TCL NXTPAPER 70 Pro camera sample." /><figcaption>TCL NXTPAPER 70 Pro,<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/rqM9YfqawJ7V4UEBPAanac.jpg" alt="Apple iPhone 17 Pro Max camera sample." /><figcaption>iPhone 17 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Both phones work hard to keep the exposure even throughout this panorama, but the iPhone surprisingly exhibits a bit more banding in the sky. Despite that flaw, it still pulls in far better detail and definition overall. From the grainy texture of the sand in the foreground to the text on the sign off to the left, the iPhone simply takes the better shot. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5A0wW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5A0wW.js" async></script><h2 class="article-body__section" id="section-tcl-nxtpaper-70-pro-vs-iphone-17-pro-max-verdict"><span>TCL NXTPAPER 70 Pro vs. iPhone 17 Pro Max: 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:4354px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XwVd5XoaXEdem4kXtoCqaT" name="TCL NXTPAPER 70 Pro vs Apple iPhone 17 Pro Max" alt="TCL NXTPAPER 70 Pro vs Apple iPhone 17 Pro Max." src="https://cdn.mos.cms.futurecdn.net/XwVd5XoaXEdem4kXtoCqaT.jpg" mos="" align="middle" fullscreen="" width="4354" height="2449" 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>When you step back and look at the big picture, the iPhone 17 Pro Max is still the vastly superior camera phone, but the TCL NXTPAPER 70 Pro proves that budget handhelds are no longer a total compromise. In ideal lighting, it can deliver shots that match the flagship at a fraction of the cost.</p><p>Where that extra $870 truly pays off is in the versatility and raw detail of the iPhone’s high-resolution ultrawide and dedicated optically backed telephoto lens — giving you massive cropping freedom without losing detail or definition. At the same time, its unbeatable low-light performance continues to highlight the biggest disparity between ultra-budget phones and top-tier models.</p><p>While the iPhone thrives in near darkness, the TCL struggles to gather light, leaving dark scenes flat, grainy, or silhouetted. If you shoot mostly in daylight, the TCL delivers incredible value, but for round-the-clock reliability and cropping power, the iPhone 17 Pro Max still reigns supreme.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/we-asked-368-people-what-they-want-from-the-apple-watch-ultra-4-heres-the-resounding-answer-and-its-not-ai">We asked 368 people what they want from the Apple Watch Ultra 4. Here’s the resounding answer (and it’s not AI)</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use">iOS 27 finally fixes the most annoying iPhone workaround we all use</a></li><li><a href="https://www.tomsguide.com/phones/iphones/new-iphone-20-video-reveals-the-8-biggest-upgrades-to-expect-from-the-20th-anniversary-iphone">New iPhone 20 video reveals the 8 biggest upgrades to expect from the 20th anniversary iPhone</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Fold 8 review: Wide for the win ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win</link>
                                                                            <description>
                            <![CDATA[ I tested the Galaxy Z Fold 8 and really like the compact and wide design, eye-popping Flex Titanium display and smart AI features. But the lack of telephoto zoom is a bummer. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">27Jmty7SGrhhXELtrwG3zi</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4RtoBDsrwS8sGu7dtM78Xh-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 29 Jul 2026 11:46:15 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 18:02:52 +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.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/4RtoBDsrwS8sGu7dtM78Xh-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 shown open on a stone bench]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 shown open on a stone bench]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 shown open on a stone bench]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/4RtoBDsrwS8sGu7dtM78Xh-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve been reviewing <a href="https://www.tomsguide.com/best-picks/best-foldable-phones"><u>foldable phones</u></a> since the very first Galaxy Z Fold, and there’s something that’s “just right” about the Galaxy Z Fold 8. It’s super light, gives you a wide front display, and the big inside screen has two distinct orientations for video watching and browsing or reading.</p><p>Other perks include a much less noticeable crease, an anti-reflective coating for the main display and handy new AI features that take full advantage of the wide canvas.</p><p>But Samsung has definitely made some trade-offs, like no telephoto zoom lens. But now that I’ve been living with the Fold 8, this feels like the future of foldables — and not just because Apple is reportedly making one just like this.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-review-release-date-and-price"><span>Galaxy Z Fold 8 review: Release date and price</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width: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.jpg" 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">The Galaxy Z Fold 8 is just 7 ounces and easy to slip into a pocket. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 has a release date of August 7th and is available to pre-order now.</p><p>This foldable has a starting price of $1,899/£1,699/AU$2,699 for 12GB of RAM and 256GB of storage. You’ll pay $2,099 or $200 more for the 512GB model and $2,499 for the 1TB Fold 8 with 16GB of RAM and 1TB of storage.</p><div ><table><tbody><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p><strong>RAM</strong></p></td><td  ><p><strong>United States</strong></p></td><td  ><p><strong>United Kingdom</strong></p></td><td  ><p><strong>Australia</strong></p></td></tr><tr><td class="firstcol " ><p><strong>256GB</strong></p></td><td  ><p>12GB</p></td><td  ><p>$1,899.99</p></td><td  ><p>£1,699.00</p></td><td  ><p>AU$2,699.00</p></td></tr><tr><td class="firstcol " ><p><strong>512GB</strong></p></td><td  ><p>12GB</p></td><td  ><p>$2,099.99</p></td><td  ><p>£1,869.00</p></td><td  ><p>AU$2,999.00</p></td></tr><tr><td class="firstcol " ><p><strong>1TB</strong></p></td><td  ><p>16GB</p></td><td  ><p>$2,499.99</p></td><td  ><p>£2,209.00</p></td><td  ><p>AU$3,599.00</p></td></tr></tbody></table></div><p>The Galaxy Z Fold 8 Ultra starts at a steeper $2,099, but it also gives you bigger displays, a telephoto zoom and larger battery.</p><h2 id="galaxy-z-fold-8-specs">Galaxy Z Fold 8 specs</h2><div ><table><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $1,899 / £1,699 /  AU$2,699</p></td></tr><tr><td class="firstcol " ><p><strong>Release Date</strong></p></td><td  ><p>August 7</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>5.5 inches </p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong></p></td><td  ><p>7.6 inches </p></td></tr><tr><td class="firstcol " ><p><strong>Chip </strong></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></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>50MP wide, 50MP Ultra wide (10x digital zoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie cameras</strong></p></td><td  ><p>10MP (main), 10MP (cover)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery </strong></p></td><td  ><p>4,800 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Wired/Wireless Charging</strong></p></td><td  ><p>45W, 20W</p></td></tr><tr><td class="firstcol " ><p><strong>Size open</strong></p></td><td  ><p>161.4 x 123.9 x 4.5 mm (unfolded)</p></td></tr><tr><td class="firstcol " ><p><strong>Size closed</strong></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>Weight</strong></p></td><td  ><p>201 grams (7.09 ounces)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Lavender, Graphite, Cream, Pistachio (online)</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-what-i-like"><span>What I Like</span></h3><h2 id="the-passport-like-design">The passport-like 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:2380px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="mvgDxNKt4bSCeKgLQJrseY" name="Galaxy Z Fold 8 review-5" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/mvgDxNKt4bSCeKgLQJrseY.jpg" mos="" align="middle" fullscreen="" width="2380" height="1339" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">The 5.5-inch cover display is short but wide enough to run apps comfortably. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Galaxy Z Fold 8 is about the same size as a passport, which makes it really easy to slip into a front pocket. And at 201 grams (7.1 ounces), this is the lightest book-style foldable in the world.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3540px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xWJMf4qbWeA7HP2ocEhjbZ" name="Galaxy Z Fold 8 review-7" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/xWJMf4qbWeA7HP2ocEhjbZ.jpg" mos="" align="middle" fullscreen="" width="3540" height="1991" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">The front screen is tailor-made for TikTok scrolling. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I really like the 10:16 front display for scrolling through TikTok videos, and there’s plenty of room for typing with two hands. Reaching across the display with one hand can be a stretch, but overall using the Fold 8 just feels right compared to the taller Fold 8 Ultra.</p><p>Plus, opening the display is a lot easier versus the Galaxy Z Fold 7 and the Fold 8 unfolds almost perfectly flat. </p><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.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="caption-text">Thanks to Flex Titanium tech, the Galaxy Fold 8 is flat when unfolded. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As for colors, the Fold 8 comes in Lavender, Graphite and Cream, and there’s a Pistachio option online only. I prefer the Lavender hue on our review unit because it has more personality.</p><h2 id="the-display-is-awesome-especially-anti-glare-coating">The display is awesome (especially anti-glare coating)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2188px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Yi3SX3rGdTkh5HdALu76vY" name="Galaxy Z Fold 8 review-LIST2" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/Yi3SX3rGdTkh5HdALu76vY.jpg" mos="" align="middle" fullscreen="" width="2188" height="1231" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">The anti-reflective 7.6-inch screen cuts down on glare outdoors.  </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If the crease on foldable phones has always bugged you, the Galaxy Z Fold 8’s main 7.6-inch display will make you happy. Thanks to Flex Titanium tech, the crease is much less visible than before.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2274px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="PP6Mk9VYuCweU6oJKijdcZ" name="Galaxy Z Fold 8 review-17" alt="Galaxy Z Fold 8 (right)" src="https://cdn.mos.cms.futurecdn.net/PP6Mk9VYuCweU6oJKijdcZ.jpg" mos="" align="middle" fullscreen="" width="2274" height="1279" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">The Fold 8 has smaller black bars but the viewing area is the same as Fold 8 Ultra. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung paired a titanium alloy film with a titanium base plate with micro-perforations that allow the display stack to adhere flush to the plate with virtually no air gaps. The result is a crease you can still feel but almost disappears when you’re viewing content. </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 bigger deal for me is the anti-reflective coating. It drastically cuts down on glare when viewing the Fold 8 outside. Check out the difference between the new Fold and the 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XviVgfrucnRziFPJAYgcpA" name="Fold 8 display spider-man" alt="Galaxy Z Fold 8 Spider Man Brand New Day trailer" src="https://cdn.mos.cms.futurecdn.net/XviVgfrucnRziFPJAYgcpA.jpg" mos="" align="middle" fullscreen="" width="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 main 7.6-inch display has a 4:3 aspect ratio when you open it up. The benefit here is that you get smaller black bars above and below the display when watching videos versus the more square 8-inch Fold 8 Ultra.</p><p>The viewing area itself is not larger, but I found watching the Red Hot Chili Peppers documentary on Netflix pretty immersive, as well as the “Avengers: Doomsday” trailer.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rN8FsPNnJYUuecJ9J2oHpA" name="Fold 8 display 3.4" alt="Galaxy Z Fold 8 3:4 display for reading" src="https://cdn.mos.cms.futurecdn.net/rN8FsPNnJYUuecJ9J2oHpA.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When you flip the Fold 8 around into portrait mode with the main display open, you get a 3:4 aspect ratio. This gives you more real estate vertically, making it the better option for surfing the web and reading ebooks.</p><h2 id="helpful-ai-features-2">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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aU3ngqVpjk6ewWQungWboA" name="Fold 8 Now Nudge" alt="Galaxy Z Fold 8 Now Nudge AI feature" src="https://cdn.mos.cms.futurecdn.net/aU3ngqVpjk6ewWQungWboA.jpg" 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">Now Nudge will suggest apps to open in multi-window mode. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 8 has some AI features that I really like.</p><p>My favorite is Now Nudge, which prompts you to open a related app in Split View without having to leave the app you’re currently using.</p><p>For example, I received a text message asking if I was free for dinner next Friday at 7 p.m. A little calendar icon appeared, and when I tapped that I opened the Calendar app in split screen mode. That’s pretty handy.</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/6m04UbLVC9E" allowfullscreen></iframe></div></div><p>Another super useful AI feature is My FanCam. When editing a video with multiple people in the frame, you can select the subject you want, and the Fold 8 will crop in and “follow” that person throughout the clip.</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/aFwm3S3JDE0" allowfullscreen></iframe></div></div><p>You can even choose the aspect ratio. This is great for sports parents, concert lovers and more, though it only works on humans — and only one at a time.</p><h2 id="very-snappy-performance">Very snappy performance</h2><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.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="caption-text">The Fold 8 is a blast for playing games on the go. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><br>Powered by a Snapdragon 8 Elite Gen 5 for Galaxy chip, the Galaxy Z Fold 8 offers flagship-level performance on par with the Galaxy S26 Ultra. I mowed down several enemies in Call of Duty Mobile and raced around tracks in Asphalt 8 without seeing any slowdowns.</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</strong></p></td><td  ><p>3,659/11,020</p></td><td  ><p>47.35/12,454</p></td><td  ><p>72242</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold </strong></p></td><td  ><p>2.711/9,134</p></td><td  ><p>35.12/9,413</p></td><td  ><p>59663</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>61,299</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><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>3,871 / 9,968</p></td><td  ><p>46.6 / 12,260</p></td><td  ><p>48549 (Quantitized Score ML/Neural Engine)</p></td></tr></tbody></table></div><p>The Fold 8 is also a multitasking champ. I could run up to three apps on screen at once without any noticeable lag. For example, I scrolled through my inbox in Gmail while playing 311 Radio on Spotify and skimming through and zooming in on my photos in the Gallery app.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2879px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="77ZTA3cHAT3JoQVSNWAUNW" name="Galaxy Z Fold 8-15" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/77ZTA3cHAT3JoQVSNWAUNW.jpg" mos="" align="middle" fullscreen="" width="2879" height="1619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">The Galaxy Z Fold 8 can run three apps at once. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Galaxy Z Fold 8 performed very well on our lab tests, too. It beats the iPhone 17 Pro Max on multi-core performance in Geekbench and in the 3DMark graphics benchmark.</p><h2 id="solid-battery-life-faster-charging">Solid battery life, faster charging</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2RjVPjGpSRDgg7JtX5ooKg" name="Fold 8 back" alt="Galaxy Z Fold 8 back side" src="https://cdn.mos.cms.futurecdn.net/2RjVPjGpSRDgg7JtX5ooKg.jpg" mos="" align="middle" fullscreen="" width="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 Galaxy Z Fold 8 is one of the first Samsung phones to offer a silicon carbon battery, which allows for more capacity without adding thickness to the phone. The Fold 8 has a 4,800 mAh battery, compared to just a 4,400 mAh Li-ion battery on the previous Fold 7.</p><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></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</strong></p></td><td  ><p>12:19</p></td><td  ><p>70%</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 7 Fold 7</strong></p></td><td  ><p>10:44</p></td><td  ><p>54%</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>14:44</p></td><td  ><p>73%</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><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>On the Tom’s Guide battery test, which consists of web surfing over 5G, the Fold 8 lasted a pretty good 12 hours and 19 minutes. That beats the Fold 7 by nearly 1.5 hours, though the Fold 8 isn’t good enough to make our <a href="https://www.tomsguide.com/us/smartphones-best-battery-life,review-2857.html"><u>best phone battery life</u></a> list.</p><p>In my time with the phone I enjoyed fairly strong endurance. For example, after a day of mixed usage, including checking email, capturing photos and videos and playing music, the battery meter was at 52%.</p><p>Still, other foldables last longer. The Galaxy Z Fold 8 Ultra with its 5,000 mAh silicon carbon battery lasted 14:33, and the Razr Fold’s 6,000 mAh battery lasted 14:44.</p><p>The Galaxy Z Fold 8 benefits from 45W charging, up from 25W on the Fold 7. At 30 minutes the Fold 8 reached 70%, compared to 54% for the Fold 7.</p><p>Wireless charging sees a boost for the Fold 8, too, going from 15W to 20W. Unfortunately, you need to buy a case if you want to get magnets for Qi 2 charging, as they’re still not built into the phone.</p><h3 class="article-body__section" id="section-what-i-mostly-like"><span>What I Mostly Like</span></h3><h2 id="cameras-are-good-but-where-s-the-telephoto">Cameras are good, but where's the telephoto?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3289px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FubpnqgwBc2ZYYL8PnptdZ" name="Galaxy Z Fold 8 review-23" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/FubpnqgwBc2ZYYL8PnptdZ.jpg" mos="" align="middle" fullscreen="" width="3289" height="1850" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Taking photos on the Fold 8 feels pretty natural through the cover display </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Don’t get me wrong. The dual rear 50MP cameras on the Fold 8 are solid. But not having a telephoto zoom is pretty frickin’ lame for a $1,900 flagship.</p><p>On the plus side, check out the excellent dynamic range in this photo of a street in London dappled in sunlight. This close-up of a zinnia flower is vibrant and detailed and the richer colors in this shot of peppers versus the more washed-out Razr Fold.</p><iframe allow="" height="400" 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=0a38d302-8aec-11f1-ba1b-0e6f42328d7d"></iframe><p>The 50MP ultrawide lens is a major upgrade over the 12MP Fold 7. I actually give the edge to the Fold 8 over the <a href="https://www.tomsguide.com/phones/iphones/ive-spent-one-month-with-the-iphone-17-pro-max-5-things-i-like-and-2-i-dont"><u>iPhone 17 Pro Max</u></a> in this ultrawide shot of a beach. The green trees pop a pit more, and there’s more detail in the rocks along the sand.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/i6m3A8UkGfAhhgKhjUQit.jpg" alt="Galaxy Z Fold 8" /><figcaption>Galaxy Z Fold 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hoYB9NWMBrGxyAfyg8VAt.jpg" alt="iPhone 17 Pro Max" /><figcaption>iPhone 17 Pro Max<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/J6AnFUR7YkysLLqbNnfdt.jpg" alt="Galaxy Z Fold 8 Ultra" /><figcaption>Galaxy Z Fold 8 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/FFDak359qecvRxR8vQVau.jpg" alt="Razr Fold" /><figcaption>Razr Fold<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Samsung also improved the Nightography on the Fold 8 for better low-light shots. And you can see the difference in these photos of a clock tower. It’s brighter and crisper. And in this image of string lights the Fold 8’s makes everything brighter and you can make out the individual bulbs easier.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/2wrLiHk9ZWEcSGxey9L9Z.jpg" alt="Galaxy Z Fold 8" /><figcaption>Galaxy Z Fold 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/SUcD6rpmHhu9jHCeakWVSo.jpg" alt="Galaxy Z Fold 8" /><figcaption>Galaxy Z Fold 7<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kitekqAd3iuKFXhuN3cef.jpg" alt="Razr Fold" /><figcaption>Razr Fold<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>What makes the Z Fold 8 Ultra an Ultra camera phone is its 200MP main camera. In this fountain shot you can make out more detail in the water bubbles and in the rocks. You just have more freedom to crop in overall.</p><iframe allow="" height="400" 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=3f242512-8aec-11f1-ba1b-0e6f42328d7d"></iframe><p>But the biggest Z Fold 8 vs Fold 8 Ultra difference is the lack of telephoto zoom. At 4x, the Fold 8 delivers a crisper image of this Queen Anne statue in London. Check out the lines in the stonework.</p><iframe allow="" height="400" 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=6e5ac7e6-8aec-11f1-ba1b-0e6f42328d7d"></iframe><p>But this 10x digital zoom shot of a tree stump rising from water shows the Fold 8’s limitations. The lines in the bark look blurrier compared to the 10MP Fold 8 Ultra with 3x optical. And the Razr Fold’s 50MP telephoto is even sharper.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/skfjecoYsDxcAXKKEePmH.jpg" alt="Galaxy Z Fold 8" /><figcaption>Galaxy Z Fold 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/a9wbSK4tv3mPNXB8ppuze.jpg" alt="iPhone 17 Pro Max" /><figcaption>iPhone 17 Pro Max<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bEMZu2hqsLsuUJeShFLPk.jpg" alt="Galaxy Z Fold 8 Ultra" /><figcaption>Galaxy Z Fold 8 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bs8w92ZUjCBxMPAA3opbs.jpg" alt="Razr Fold" /><figcaption>Razr Fold<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>I don’t have any complaints about the selfies from the Galaxy Fold 8. The front 10MP camera. My blue shirt pops, and there’s plenty of detail in my hair and the surrounding grass. The inside 10MP produced a vivid but somewhat blurrier image.</p><p>Plus, you can always flip the display around and use the main 50MP wide camera to take selfies. The results look sharp though the shadows are more pronounced than I’d like.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/nAvTT6ssuQQNM4e6RXUqj.jpg" alt="Galaxy Z Fold 8" /><figcaption>Inside Camera - Galaxy Z Fold 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/3AbR4H4oHUbcLUSYYrbkj.jpg" alt="Galaxy Z Fold 8" /><figcaption>Front Camera - Galaxy Z Fold 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Hs4g68QEV8JhnocgjsTyY.jpg" alt="Galaxy Z Fold 8" /><figcaption>Main Camera - Galaxy Z Fold 8<small role="credit">Tom's Guide</small></figcaption></figure></figure><h3 class="article-body__section" id="section-what-i-don-t-like"><span>What I Don't Like</span></h3><h2 id="more-apps-need-optimization-for-the-big-screen">More apps need optimization for the big screen</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xk5KeA75WpyRNUfgTjXLuY" name="Fold 8 multitasking" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/xk5KeA75WpyRNUfgTjXLuY.jpg" 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">Two apps running side by side on the Galaxy Z Fold 8 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There’s a fair number of apps that are truly optimized for the Fold 8’s wide display. In Gmail, you can see your inbox on the left and the content of your images on the right. And in TikTok the comments will pop up on the right side of the display while the video plays on the left. Spotify looks pretty slick, too, with your playlists here and play window there.</p><p>However, some apps just feel like stretched out phone experiences. Slack should have you rooms and contacts on the left and messages on the right instead of just really wide conversation windows. Other apps that could use the dual-pane treatment include Reddit and especially X.</p><p>I get that the iPhone Ultra isn’t out yet. But you know there's going to be a better app experience right from day one. Just look at iPadOS on the iPad mini.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/YNuV6vT8MHbh6YZ4XQtbdZ.jpg" alt="Galaxy Z Fold 8 shown held in-hand" /><figcaption>The split-screen keyboard on the Galaxy Z Fold 8<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/HLiQi7svQtipSGHmWC9sSZ.jpg" alt="Galaxy Z Fold 8 shown held in-hand" /><figcaption>The Fold 8's cover display is roomy enough for comfortable typing.<small role="credit">Tom's Guide</small></figcaption></figure></figure><h2 id="where-is-the-dust-resistance">Where is the dust resistance?</h2><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.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="caption-text">Don't get sand or dust in the Fold 8. It's not IP68 rated. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Unfortunately, you’re stuck with the same IP48 durability rating on the Galaxy Z Fold 8. That means this device can withstand being submerged in water for 30 minutes but is not dust resistant. I’d like to see Samsung take the leap to IP68 so you can actually take foldables like this to the beach.</p><p>Other foldables like the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Google Pixel 10 Pro Fold</a> and <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a> are IP68 rated.</p><p>During a roundtable discussion, a Samsung exec told us that the company is not chasing numbers but real-world scenarios. But I’d argue dust and sand are “real world.”</p><h2 id="flex-view-is-ultra-exclusive">Flex view is Ultra exclusive</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='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 shown in hand" src="https://cdn.mos.cms.futurecdn.net/FTAPbqnyMxnn72TGFVq4Eg.jpg" 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">The Galaxy Z Fold 8 Ultra has Flex View but the Fold 8 does not. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Because of the way the hinge was designed, there’s no Flex Mode on the Fold 8 — that’s exclusive to the Fold 8 Ultra. So that means you can’t use the Fold 8 as a mini laptop. I missed not being able to watch YouTube videos in this mode or do quick Google Meet calls.</p><h2 id="still-no-s-pen">Still no S Pen</h2><p>The Galaxy Fold 8 one again eschews the S Pen. While I’ve never been a heavy user, there’s lot of people who would like a stylus for taking notes, editing photos and drawing, especially on such a wide canvas.</p><p>Samsung has clearly prioritized thinness and the lack of a crease over including a digitizer. Company reps have told us they are <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 exploring the possibility of the S Pen’s return</a>. But that will have to be another foldable.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-review-verdict"><span>Galaxy Z Fold 8 review: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2080px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bPd7ZTJvXjFWH9MbVievUY" name="Galaxy Z Fold 8 review-13" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/bPd7ZTJvXjFWH9MbVievUY.jpg" mos="" align="middle" fullscreen="" width="2080" height="1170" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Overall, I’m a big fan of the Galaxy Z Fold 8. It’s the foldable design I’d rather carry and use every day over any other foldable. It’s lighter and more compact than the Fold 8 Ultra, and the main display is big enough for split-screen multitasking and binge watching.</p><p>I also really appreciate that the crease is less visible and especially the anti-glare coating, as well as the strong performance and pretty solid battery life. And while I’m getting AI fatigue, features like Now Nudge just make sense on a foldable.</p><p>On the other hand, I don’t like that I have to give up a telephoto lens. And while I personally don’t mind the lack of an S Pen, there are apparently many people who do.</p><p>I <em>do care</em> about the lack of dust resistance, and that some pretty high-profile apps aren’t optimized for the big screen — when you know the iPhone Ultra will likely have an advantage on day one. </p><p>So for now the Galaxy Z Fold 8 is the foldable I want. But Samsung please give us a better zoom next time. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I got sick of buying cases for my phones, so I decided to 3D print them at home — here's what happened ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/i-got-sick-of-buying-cases-for-my-phones-so-i-decided-to-3d-print-them-at-home-heres-what-happened</link>
                                                                            <description>
                            <![CDATA[ 3D printing a phone case could help you save money on buying them, but it probably isn't for everyone. Here's my experience. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mmzWHyGAHMPFSkthE29ski</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/J9bUPGTuNDfUcdUyQ4D2xF-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 29 Jul 2026 08:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 14:26:19 +0000</updated>
                                                                                                                                            <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[3D Printers]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Computing Hardware]]></category>
                                                    <category><![CDATA[Printers]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/J9bUPGTuNDfUcdUyQ4D2xF-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[3d printed phone cases by tom]]></media:description>                                                            <media:text><![CDATA[3d printed phone cases by tom]]></media:text>
                                <media:title type="plain"><![CDATA[3d printed phone cases by tom]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/J9bUPGTuNDfUcdUyQ4D2xF-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's quite important to keep your phone in a protective case. I recently found this out the hard way after letting my<a href="https://www.tomsguide.com/phones/iphones/i-knew-better-than-to-carry-around-a-naked-phone-then-my-iphone-17-pro-max-met-the-asphalt"> iPhone 17 Pro Max fall onto the asphalt</a> and pick up some chips and dents it really didn't need. Buying phone cases is a rather tedious experience, though, and the sheer scale of the phone accessories market means there are countless options at a variety of different price points. Which one do you choose?</p><p>This got me wondering whether you actually needed to make a choice at all. I actually purchased a 3D printer at the start of the year, and immediately started looking for ways to justify that purchase to my wife. I've had limited success so far, mostly making plastic trinkets that break far too easily, but what if I used it to print my own cases from scratch?</p><p>That way I could get myself a new phone case in a single afternoon, without having to spend money or wait for it to be delivered. Not to mention the fact that if I can do this regularly, I may end up slightly reducing the environmental impact of getting future cases sent out to me.</p><h2 id="getting-the-right-materials">Getting the right materials</h2><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="8eVxzabBYmdQkfTVS32qWQ" name="PXL_20260728_143853284" alt="3d printing your own iphone and galaxy z fold 7 cases" src="https://cdn.mos.cms.futurecdn.net/8eVxzabBYmdQkfTVS32qWQ.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>I'm still fairly new to 3D printing, so everything I've done has involved me learning as I go, making many, many mistakes in the process. Thankfully one of those mistakes was not just 3D printing a case without thinking, using the basic PLA (polylactic acid) filament I purchased with my printer. While useful for a lot of things, this is rigid and fairly brittle plastic.</p><p>Not only would this offer very poor shock protection, the lack of flexibility means you're not actually going to be able to get your phone into the case itself. You would have to utilize an elaborate multi-part design that locks together around your phone. </p><p>And <strong>don't even think about printing a case around your phone. The material coming out of the nozzle is molten plastic, and PLA is heated to over 300 degrees Fahrenheit during the printing process</strong>. That's definitely not something you want near your pricey smartphone.</p><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="aMKCKYtQMLWyLtXqrh6gZQ" name="PXL_20260727_124311173" alt="3d printing your own iphone and galaxy z fold 7 cases" src="https://cdn.mos.cms.futurecdn.net/aMKCKYtQMLWyLtXqrh6gZQ.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>Much of the consensus online was that TPU (Thermoplastic Polyurethane) was the best option for home case printing. TPU is flexible thanks to some rubber-like qualities, and that means the final print is not locked into a rigid position like PLA.</p><p>That means it has better resistance to impact, tearing, and other damage your phone might suffer throughout its life. Plus it's a relatively cheap filament, and you can stretch it around your device without suffering any ill effects.</p><p>There are downsides to TPU, though, like the fact the material has a habit of absorbing moisture from the air. Too much moisture affects the quality of the filament, and while fixable it's not ideal for anyone that lives in a humid area like I do. I should also note that TPU is not suitable for all case designs, since they need some rigidity to function properly.</p><p>There are other issues to be aware of, but I'll get to those later, since I experienced them first hand.</p><h2 id="which-cases-do-i-print">Which cases do I print?</h2><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="TbXUz6wJDXPoUtFzaGMpFG" name="PXL_20260728_134542636" alt="3d printed phone cases by tom" src="https://cdn.mos.cms.futurecdn.net/TbXUz6wJDXPoUtFzaGMpFG.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>Unless you're a dab hand with CAD software, or have access to a 3D scanner, you're going to have to source the printing files from one of the many 3D printing repositories on the net. That's certainly the easiest option for the 3D printing noobs like myself, and depending on where you look you should be able to find something suitable for your phone.</p><p>I went to <a href="https://www.thingiverse.com/" target="_blank" rel="nofollow">Thingiverse </a>and picked out cases for the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> (<a href="https://www.thingiverse.com/thing:7155158" target="_blank" rel="nofollow">by Moridith</a>) and <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a> (<a href="https://www.thingiverse.com/thing:7109320" target="_blank" rel="nofollow">by rstarin</a>) — both of which are available under a Creative Commons license.</p><p>Both of these cases are very different, and the creators have advice on what kind of filament you should use. Moridith's iPhone case recommends using TPU, while rstarin notes that the Z Fold 7's half-case was designed with PLA in mind.</p><p>While I did listen to this advice, I ended up printing both cases in TPU and PLA. That way I could see for myself just how different the two materials are, and why it's important to make sure you have the right filament.</p><h2 id="pla-s-hardness-can-be-a-blessing-and-a-curse">PLA's hardness can be a blessing and a curse</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/CrzVhYopgsDxCa59FojoEU.jpg" alt="3d printed hard plasic iphone case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/yfMNLCANpTNZETtuGaLxMQ.jpg" alt="3d printing your own iphone and galaxy z fold 7 cases" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/w2ag2o7merRoS3U5FELaCU.jpg" alt="3d printed hard plasic iphone case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>The first print was making the iPhone 17 Pro Max case out of PLA, just to see how it would fare if I did try to put an iPhone 17 Pro Max into it. The print itself came out rather well, which is a little annoying considering this case was never intended to be used. </p><p>There are some printing errors in various places, including the base of the sides and some unwanted stringing around the top lip. In hindsight I should have added some supports to the design before attempting to print — but considering this was intended as an experiment that would have just wasted extra filament. </p><p>Needless to say the iPhone 17 Pro Max does not fit into this case. There isn't even a way to force it in, because the hard plastic lip is in the way. If that wasn't bad enough, the buttons are rock solid, and totally unusable. Even if you could squeeze the 17 Pro Max into here, those buttons would need to be cut out first.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:608px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FocTiNJ7VS2eF4JwAGVd5H" name="ezgif-7fd69ab3024af894" alt="3d printed phone cases by tom" src="https://cdn.mos.cms.futurecdn.net/FocTiNJ7VS2eF4JwAGVd5H.gif" mos="" align="middle" fullscreen="" width="608" height="342" attribution="" endorsement="" 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 case was stronger than I anticipated, though. I'd printed it with a gyroid infill, which is known for its relative strength, and decided I'd see how easy it was to break the PLA case. It ended up being harder than I thought, on account of the case's thickness, and while I was able to break it with my bare hands it took a fair bit of repeated effort to do so.</p><p>The Z Fold 7 case, on the other hand, is an open design that's designed to clip into the back of the phone — rather than wrap around it. You see a lot of foldable cases like this, since the dual-sided design doesn't really fit well with a lot of other more protective case designs.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/kxsb5JYpp7wTqVe2AvD5Z3.jpg" alt="3d printed case on back of galaxy z fold 7" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/7sGHyf3UGW8WTn3WYwWkTQ.jpg" alt="3d printing your own iphone and galaxy z fold 7 cases" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/n7zZTmgGwnm2HrGZ8PZ7Y3.jpg" alt="3d printed case on back of galaxy z fold 7" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/X8CykohsFtjZpxJVkmQhX3.jpg" alt="3d printed case on back of galaxy z fold 7" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Snap on it did, and while the design only covers half of the phone it shows that you can still print out your own hard plastic cases and make full use of them. I will caveat by saying that attempting to take it off was tricky, and I ended up snapping the thinner material around the mic hole. </p><p>The minimal thickness of the design and rigidity of the plastic suggests to me that this design will not offer much meaningful drop protection. But that's also true of any thin phone case, regardless of how it came into this world.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-egK7je"></div>                            </div>                            <script src="https://kwizly.com/embed/egK7je.js" async></script><h2 id="tpu-was-a-better-all-rounder-with-some-drawbacks">TPU was a better all-rounder — with some drawbacks</h2><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="XqExGeE2735xvKuej5CfwG" name="ezgif-712213318d653140" alt="3d printed phone cases by tom" src="https://cdn.mos.cms.futurecdn.net/XqExGeE2735xvKuej5CfwG.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: Future)</span></figcaption></figure><p>Printing a Z Fold 7 case made out of the flexible TPU turned out to be a total waste of time. The design is too thin and the flexibility means it just flops around like a fish out of water. That lack of sturdiness and friction also means that this case is not going to stay attached to your phone for very long.</p><p>That said, <strong>for a more encompassing case, TPU proved to be a better option for the iPhone 17 Pro Max</strong>. I will admit that I did make a bunch of rookie mistakes in the process of printing my first one, though.</p><p>The most obvious mistake I made is that I totally forgot to change the filament type in my 3D printer's companion software. This meant that my printer thought it was working with PLA instead of TPU. The consequence of this was that the printer was working much faster than it should have, and left countless web-like strings of filament all over the case.</p><p>I also forgot to add support to the print, which means that various attributes like buttons and the lip around the edge of the case's front didn't come out as neatly as they could have done. Thankfully, all of these issues were cosmetic, and didn't actually detract from the functionality of the case itself.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/4wXrKsW5oSzwd8WgTYS7VQ.jpg" alt="3d printing your own iphone and galaxy z fold 7 cases" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/DJELP8i3NfbXFBTPn6W89b.jpg" alt="3D printing case for iPhone fail" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/avaWCAFMEbjXawTj29vh9b.jpg" alt="3D printing case for iPhone fail" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/UizYWp8bkp7XvApNGfsH9b.jpg" alt="3D printing case for iPhone fail" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Cosmetic is putting it lightly though, and my initial description of this case was "ugly as sin." Thankfully, this doesn't change the fact the flexible material allows the case to wrap around my iPhone 17 Pro Max. It feels soft and cushioned compared to PLA, and is capable of returning to its original form after being squashed and twisted around in my hands.</p><p>But herein lies the problem of printing with TPU: printing it properly is an exceedingly slow process. To put it into perspective, the PLA version of the iPhone case was finished in under two and a half hours. In the same amount of time, printing the final version of the TPU was just past the halfway point.</p><p>Overall, the TPU print took 4 hours 37 minutes, and was so long that the timelapse footage I shot was nearly 10 minutes in length.</p><p>Slow printing is an issue for two reasons. The first is that you have to physically wait longer, which is no good if you're an impatient type. Likewise the longer a print takes, the more opportunity there is for something to go catastrophically wrong. It can and does happen, and nothing is worse than getting close to the end of a multi-hour print and finding yourself having to repeat the whole thing.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/pJBsf4dygSTuuP7LgAzF8G.jpg" alt="3d printed phone cases by tom" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Gzy7ZCju7RM4WhqCxvA8PH.jpg" alt="3d printing your own iPhone" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jbZdHQPyNDuPiZy7SFbuNH.jpg" alt="3d printing your own iPhone" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/K6jh7cg2yeKs2BGKm4zz5G.jpg" alt="3d printed phone cases by tom" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/h5DVMKNMY9H2UP4sQa27PH.jpg" alt="3d printing your own iPhone" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bU5T7YcBx2FHWdQxtQLs5G.jpg" alt="3d printed phone cases by tom" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/883NXHw7G5peuzs2Ps3aNH.jpg" alt="3d printing your own iPhone" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Thankfully, printing out slowly seems to have (mostly) fixed the webbing issue. There are still some stray strands of filament that need cutting, but the majority of them are totally gone. Likewise, the case itself does look a lot better thanks to the slow printing keeping the look a lot neater.</p><p>It wasn't error free, especially where the support connects to the case, but for the most part it looks like a very good (albeit bulky) phone case. That may not be to everyone's tastes, but I personally couldn't care less — especially given the size of the 17 Pro Max.</p><p>Just be aware that you need some good pliers to rip out all the internal supports. it's fiddly, and you'll end up with little strands of used filament all over the place if you're not careful.</p><h2 id="how-much-did-it-cost-me-to-print-both-cases">How much did it cost me to print both cases?</h2><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="kftSauA9KTZAiZD3khFtb6" name="PXL_20260728_134545759 (1)" alt="3d printed iPhone case" src="https://cdn.mos.cms.futurecdn.net/kftSauA9KTZAiZD3khFtb6.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>Ignoring the fact that I had to pay for the 3D printer in the first place, just how much did I end up paying for these cases? Both rolls of filament were 1 kilogram (2.2 pounds) each, with PLA costing me £18/$24 and the TPU costing £12/$16. </p><p>This means the actual cost of PLA was £1.80 per 100g of filament or £0.018 per gram. Meanwhile TPU cost £1.20 per 100g, or £0.012 per gram.</p><p>The Galaxy Z Fold 7 case wasn't very large, and used up roughly 13.75  of filament. The iPhone 17 Pro Max case was obviously a lot larger, and used 54.35 grams of filament. With this information I can calculate that the two cases used up a respective £0.25 and £0.65 worth of their respective filament.</p><p>I printed off multiple versions of these cases, each with slight variations in the amount of filament they used. But even if you add them all together, the total cost of the filament pales in comparison to the cost of buying a case. Especially if you're looking at ultra premium options, like <a href="https://www.apple.com/shop/product/mgfd4ll/a/iphone-17-pro-max-techwoven-case-with-magsafe-green?fnode=124eed4a44e007eca4fdede40a7e9392979e5b346eee6382f23caddbaffcd03db867c4ef2f13515a304464b7d075ec768a36f99899b19ae85db204639846a89ea67b16615b844026b5f06760e731b976f7ef62f72152dcca7872390c2f75468b2e12c7414a52aff0bc3e56c21ebee0cd&fs=fh%3D458b%252Bf94af8" target="_blank" rel="nofollow">Apple's $59 TechWoven case for iPhone 17 Pro Max</a>.</p><p>Obviously, it's a little more complicated than just the raw material costs. I needed to pay for electricity to power the 3D printer, as well as the 3D printer itself. I should mention that the model I have, the Creality Ender 3 V3 SE, is a pretty cheap option, and is currently on sale for <a href="https://www.amazon.com/Creality-Ender-V3-SE-8-66x8-66x9-84/dp/B0F8J78BN1/" target="_blank" rel="nofollow">$186 at Amazon</a> — or <a href="https://www.amazon.com/Creality-Printer-Bundle-Filament-Packs%EF%BC%88Black/dp/B0FQV2PLV1/" target="_blank" rel="nofollow">$197 with four rolls of PLA filament.</a></p><div class="product"><a data-dimension112="e5091536-8a84-11f1-93f9-0d0cb6cf0ebf" data-action="Deal Block" data-label="The Creality Ender 3 V3 SE 3D printer is the model I chose to to get myself started with 3D printing. A combination of the low price tag and easy-to-use features. It lacks any connectivity for remote access, but it still offers auto levelling, quick filament swapping, and printing support for multiple different materials" data-dimension48="The Creality Ender 3 V3 SE 3D printer is the model I chose to to get myself started with 3D printing. A combination of the low price tag and easy-to-use features. It lacks any connectivity for remote access, but it still offers auto levelling, quick filament swapping, and printing support for multiple different materials" data-dimension25="$186" href="https://www.amazon.com/Creality-Ender-V3-SE-8-66x8-66x9-84/dp/B0F8J78BN1/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1301px;"><p class="vanilla-image-block" style="padding-top:115.30%;"><img id="VGQafes8kzVwZNg8bGi226" name="Ender 3 V3 SE 3D Printer" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/VGQafes8kzVwZNg8bGi226.png" mos="" align="middle" fullscreen="" width="1301" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Creality Ender 3 V3 SE 3D printer is the model I chose to to get myself started with 3D printing. A combination of the low price tag and easy-to-use features. It lacks any connectivity for remote access, but it still offers auto levelling, quick filament swapping, and printing support for multiple different materials<a class="view-deal button" href="https://www.amazon.com/Creality-Ender-V3-SE-8-66x8-66x9-84/dp/B0F8J78BN1/" target="_blank" rel="nofollow" data-dimension112="e5091536-8a84-11f1-93f9-0d0cb6cf0ebf" data-action="Deal Block" data-label="The Creality Ender 3 V3 SE 3D printer is the model I chose to to get myself started with 3D printing. A combination of the low price tag and easy-to-use features. It lacks any connectivity for remote access, but it still offers auto levelling, quick filament swapping, and printing support for multiple different materials" data-dimension48="The Creality Ender 3 V3 SE 3D printer is the model I chose to to get myself started with 3D printing. A combination of the low price tag and easy-to-use features. It lacks any connectivity for remote access, but it still offers auto levelling, quick filament swapping, and printing support for multiple different materials" data-dimension25="$186">View Deal</a></p></div><h2 id="final-thoughts-the-problem-with-3d-printing-phone-cases">Final thoughts: The problem with 3D printing phone cases</h2><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="jB5Z24WzUNta76sFMfqXXQ" name="PXL_20260728_122901735" alt="3d printing your own iphone and galaxy z fold 7 cases" src="https://cdn.mos.cms.futurecdn.net/jB5Z24WzUNta76sFMfqXXQ.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 you have a lot of phones lying around and need a way to protect them all quickly and cheaply, then 3D printing isn't such a bad option — so long as you have a printer handy. But that isn't the case for most of the people reading this, since you will only have one phone. </p><p>Unless you have a super-old or super obscure phone, you're spoiled for choice when it comes to picking a case. If you're looking for practicality, fashionable designs, or the absolute bare minimum of protection to keep your phone safe from stray falls, there is something out there for you. Odds are it isn't going to cost you much money either.</p><p>Unless you are a skilled and experienced 3D printer, then making your own cases at home comes with some obvious pitfalls. The main one being that 3D printed cases look like they've been 3D printed, and stylishness is not going to be high on your list of priorities. You also need to find the right type of case files for your phone, and the equipment needed to produce it. </p><p>The more experienced 3D printers among you will likely be able to make a bunch of elaborate and fanciful designs. Using multiple colors, adding magnets, tweaking the design so you can't see the print lines as easily and things of that nature. But those people are certainly in the minority, and presumably have been in the 3D-printed case game for a long time.</p><p>This process works for me and the many phones I have to utilize as part of my job as a Phones Editor. But I'm not saying you should go out and buy a 3D printer just so you can save money on making your own phone cases. That said, if you have a 3D printer or were already interested in picking one up soon, then you might as well give this a go. </p><p>Who knows, you might even prefer things this way.</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-tried-using-the-galaxy-z-fold-8s-myfancam-on-my-dogs-but-i-hit-a-major-wall">I tried using the Galaxy Z Fold 8’s MyFanCam on my dogs, but I hit a major wall</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-realized-the-samsung-galaxy-z-fold-8-ultra-fixes-the-worst-thing-about-fingerprint-scanners">I just realized the Samsung Galaxy Z Fold 8 Ultra fixes the worst thing about fingerprint scanners</a></li><li><a href="https://www.tomsguide.com/phones/iphones/new-iphone-20-video-reveals-the-8-biggest-upgrades-to-expect-from-the-20th-anniversary-iphone">New iPhone 20 video reveals the 8 biggest upgrades to expect from the 20th anniversary iPhone</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I turned my iPhone screen completely gray for two weeks — here's how making it boring helped me get my brain back ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/i-turned-my-iphone-screen-completely-gray-for-two-weeks-heres-how-making-it-boring-helped-me-get-my-brain-back</link>
                                                                            <description>
                            <![CDATA[ I set my iPhone to grayscale for two weeks to break my phone addiction. Here is what happened, the rules to survive the switch, and why the habit stuck. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VQMwfRwAsypH5mkcse6AxR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/zqyDD8gnFC4FuRrQ5rZojS-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 29 Jul 2026 06:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 10:44:17 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/zqyDD8gnFC4FuRrQ5rZojS-1280-80.jpg">
                                                            <media:credit><![CDATA[Kaycee Hill / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Grayscale color filter enabled on iPhone]]></media:description>                                                            <media:text><![CDATA[Grayscale color filter enabled on iPhone]]></media:text>
                                <media:title type="plain"><![CDATA[Grayscale color filter enabled on iPhone]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/zqyDD8gnFC4FuRrQ5rZojS-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I thought <a href="https://www.tomsguide.com/phones/iphones/iphones-grayscale-filter-rescued-my-sensitive-eyes-heres-how-to-enable-it">turning my iPhone screen monochrome</a> would be a straightforward, low-stakes experiment. A minor productivity tweak to trim maybe twenty minutes off my daily screen time. I was radically, foolishly wrong. </p><p>What I expected to be a mild digital detox turned into two weeks of sensory deprivation, phantom-limb anxiety, and a genuine shock at how my brain relies on color, <em>especially</em> in the middle of summer.</p><p>If you want to experience instant disorientation, and ultimately, a profound sense of digital freedom, flip your phone to grayscale on a blazing July afternoon. But consider yourself warned: the transition is an absolute shock to the system. </p><p>Before you reach the quiet relief of a quieted mind, you have to survive the initial withdrawal of a world drained of its color.</p><h2 id="summer-cast-in-newsprint">Summer cast in newsprint </h2><p>The first three days felt like a slow-motion collision between muscle memory and self-restraint, with my brain throwing a quiet, frantic temper tantrum every time my thumb touched the screen. </p><p>Taking photos, in particular, degenerated into a bizarre act of blind faith. Standing on a packed pier, trying to capture the moment where the English coast looks like the Mediterranean, yielded nothing on my screen but a dull, slate gradient. It looked less like a seaside holiday and more like an archival photo of a Victorian industrial dock. </p><p>Social media felt completely drained of its pull. We rarely notice how much platforms like Instagram rely on rich warmth and hyper-saturated color to trigger envy, hunger, or idle curiosity. In grayscale, the endless feed loses its hypnotic spell. </p><p>I'd open an app purely out of habit, stare at a flat gray wall of content for three seconds, realize my brain wasn't getting the cheap reward it wanted, and close it. Then I'd do it again two minutes later. </p><p>They say insanity is doing the same thing over and over expecting a different result, and grayscale definitely caught me red-handed.</p><h2 id="the-day-7-shift">The day 7 shift </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PvQdU4aAMVHbxyXqqyPz3h" name="using grayscale mode before bed" alt="A hand holds an iPhone 11 showing the Tom's Guide best mattress guide in grayscale against a bed" src="https://cdn.mos.cms.futurecdn.net/PvQdU4aAMVHbxyXqqyPz3h.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>By the time I hit a week, the constant low-grade frustration completely evaporated, replaced by a strange, liberating quiet. The initial withdrawal phase was over. </p><p>My thumb stopped twitching toward the phone every time there was a lull in my day, because my brain had finally registered that the rectangle in my pocket was no longer a source of instant entertainment.</p><p>With screen time down over sixty percent, my attention span began to heal in ways I didn't expect. I found myself picking up a book on my commute, turning to my neglected record player, and, for lack of a better term, finding <em>play </em>again. </p><p>My iPhone went from being a black hole for my attention back to what it was originally meant to be: an inanimate utility tool. </p><p>If you want to reach that same turning point without throwing your iPhone into the nearest ditch, you need a strategy to get you through the adjustment period. Here is what helped me survive the shift, and the rules I wish I'd set on day one. </p><h3 class="article-body__section" id="section-how-to-enable-grayscale-on-your-iphone"><span>How to enable Grayscale on your iPhone</span></h3><ul><li>Open settings</li><li>Navigate to Accessibility</li><li>Tap Display & Text Size</li><li>Select Color Filters and toggle the switch on</li><li>Select Grayscale</li></ul><h3 class="article-body__section" id="section-the-greyscale-survival-guide"><span>The greyscale survival guide </span></h3><section class="howto-block">                    <h3>Rule 1) Ride out the 4-second friction window</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/SJkrNuYnYPFvPhHiL78ec8.jpg"                                        alt="A frustrated man looking at his smartphone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/SJkrNuYnYPFvPhHiL78ec8.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Shutterstock)</div></figure>                    <p><p>The hardest part of the transition is the phantom-limb itch, where you reach into your pocket out of pure boredom, unlock your phone, and feeling an immediate surge of annoyance when you see a dull, gray grid. </p><p>Recognise that annoyance for what it is: dopamine withdrawal. Don't fight it, and definitely don't beat yourself up if you cave and flip the color back on halfway through day three. Breaking an addiction isn't linear. If you falter, just take a breath, re-enable the filter whenever you're ready, and try again.</p></p>                </section><section class="howto-block">                    <h3>2) Reframe your phone </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/tswF9GzCdEeykJ9PuyKzsK.jpg"                                        alt="An image of an iPhone 11 against a pillow, showing the Tom's Guide TikTok page in grayscale"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/tswF9GzCdEeykJ9PuyKzsK.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Stop viewing your iPhone as a pocket-sized entertainment center and start treating it like a landline. It exists for direct communication, quick lookups, and practical tasks, not as a passive reward machine for when you have thirty seconds of downtime in a queue. </p><p>Expect this mental shift to feel incredibly clunky at first. You <em>will</em> reflexively tap into apps out of habit and that's completely fine.</p></p>                </section><section class="howto-block">                    <h3>Rule 3) Switch to text-first navigation </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/NK6PEREMRTA6YU8Ldn7qBA.jpg"                                        alt="A woman lies in bed at night looking at her phone, she is illuminated by the light from the screen."                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/NK6PEREMRTA6YU8Ldn7qBA.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Getty Images)</div></figure>                    <p><p>When app icons lose their distinct, candy-like colors, your muscle memory will fumble terribly trying to find them on your home screen. Stop scanning for colorful logos. </p><p>Reorganize your home screen into clean, labeled folders, or bypass the home screen entirely by using Spotlight Search to open what you need with clear intent rather than mindless tapping.</p></p>                </section><section class="howto-block">                    <h3>Rule 4) Disable notification badges altogether </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/fBMfzHjmG3zd83fPUWs4bK.jpg"                                        alt="iphone grayscale filter enabled"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/fBMfzHjmG3zd83fPUWs4bK.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Kaycee Hill / Tom's Guide)</div></figure>                    <p><p>Even in grayscale, those tiny gray notification dots create a subtle, nagging urge to clear them. Turn off app icon badges completely in your iOS notification settings. It takes away the visual bait that keeps you checking for updates.</p></p>                </section><section class="howto-block">                    <h3>Rule 5) Trade the screen for a physical object</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/ohNzUwTZjuB8XYiVxw6RLi.jpg"                                        alt=""                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/ohNzUwTZjuB8XYiVxw6RLi.jpg"                                        class="expandable van-old-layout-image">                            </p></figure>                    <p><p>If you find yourself having a particularly hard time or feeling genuinely restless during those first few days, remember that breaking a physical thumb habit requires replacing it with a tactile alternative. </p><p>Carry a small paperback, a pocket notebook, or a tactile fidget object in the exact pocket or bag slot where your phone usually lives. When the phantom itch strikes and the craving to scroll feels overwhelming, reach for the physical object first to satisfy the reflex. </p></p>                </section><h2 id="how-two-weeks-of-gray-reshaped-my-habit">How two weeks of gray reshaped my habit</h2><p>By week two, the novelty wore off and my brain just got used to it. The urge to constantly check my phone died down because there was nothing visual pulling me in. I stopped reaching into my pocket out of sheer boredom.</p><p>When the two weeks ended and I switched the color back on, it was surprisingly jarring. Everything looked aggressively bright, almost like the screen was turned up too high.</p><p>The real test, though, was whether the old habits would immediately come back. They didn't. Even with full color restored, the automatic reflex to scroll was broken. My screen time has stayed way down, and I stop defaulting to my phone every time I had two free seconds.</p><p>Did the experiment break my dopamine addiction? Yes, aggressively so. Going grayscale for a bit isn't a silver bullet, but it does a fantastic job of resetting your baseline. </p><p>It's a clear reminder that our phones are designed to keep us hooked, docile, and distracted. You just have to decide if you're willing to play along. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLqxNX"></div>                            </div>                            <script src="https://kwizly.com/embed/OLqxNX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/ive-been-using-my-iphone-as-a-real-life-pokedex-to-scan-every-bug-in-my-garden-this-summer">I’ve been using my iPhone as a real-life Pokédex to scan every bug in my garden this summer</a></li><li><a href="https://www.tomsguide.com/phones/apple-buried-a-perfect-dumb-phone-feature-inside-your-iphone-heres-how-to-turn-it-on">Apple hid a perfect 'dumb phone' feature inside your iPhone that's great for kids — here's how to turn it on</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-siri-ai-in-ios-27-for-3-weeks-7-things-to-try-first-and-the-feature-that-won-me-over">I've been testing Siri AI in iOS 27 for 3 weeks: 7 things to try first (and the feature that won me over)</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Experts call Apple's new lease plan an attempt to 'mask the effect of rising hardware costs' ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/experts-call-apples-new-lease-plan-an-attempt-to-mask-the-effect-of-rising-hardware-costs</link>
                                                                            <description>
                            <![CDATA[ Apple Upgrade is a new leasing program from the tech giant that lets you rent Apple devices for fixed terms. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ZU3aeASc6zYAaDx3mAynmX</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sTDBQSgzZKANHK3AZ4km5h-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 28 Jul 2026 17:35:07 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/sTDBQSgzZKANHK3AZ4km5h-1280-80.jpg">
                                                            <media:credit><![CDATA[Eric Thayer/Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple logo on building ]]></media:description>                                                            <media:text><![CDATA[Apple logo on building ]]></media:text>
                                <media:title type="plain"><![CDATA[Apple logo on building ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sTDBQSgzZKANHK3AZ4km5h-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Today <a href="https://www.apple.com/newsroom/2026/07/apple-upgrade-launches-in-the-united-states/" target="_blank">Apple announced</a> its new leasing program, Apple Upgrade which is undergirded by Klarna for iPhone, Apple Watch, Mac and iPad.</p><p>The program lets customers sign up for a plan, similar to how you would lease a car, for fixed 12-, 24- and 36-month terms depending on the device.  There are options to upgrade to a new device early or return it at the end of the lease.</p><p>Apple called the new plan a "more flexible way to pay for products."</p><p>It's possible this does offer some flexibility from paying an upfront lump sum or tying yourself to an onerous contract via a network carrier like Verizon or T-Mobile. </p><p>However, experts I spoke with think the Upgrade plan is meant to cover <a href="https://www.tomsguide.com/computing/hardware/sk-hynix-warns-2027-will-be-worst-year-for-ram-prices-right-as-a-damning-report-reveals-something-that-will-add-fuel-to-the-price-fixing-lawsuit">rising component costs</a>. </p><p>"By shifting the focus to lower monthly payments, it helps mask the effect of rising hardware costs and makes premium devices feel more affordable and attainable for a broader range of consumers," Jitesh Ubrani, a director at IDC, said. </p><p>They added that it could entice people who don't want to pay the higher upfront costs, as even <a href="https://www.tomsguide.com/computing/macbooks/for-first-time-since-1984-thinking-about-bailing-on-apple-customers-react-apple-price-hikes">Apple has hiked prices recently</a>. It also gives Apple a "steady stream of trade-ins" that the company can resell to expand its customer base.</p><p>"Many people are effectively leasing their phones already through carrier plans; leasing a watch or a Mac -- when you know that these are also devices that have upgrade cycles -- can make sense," Techsponential's Avi Greengart told Tom's Guide.  "it's still a lease, so you won't be able to use it until it dies unless you buy out the lease, and it may not be the absolute most economical approach."</p><p>Beyond upfront prices, is Apple Upgrade better for you? Let's take a look at how the program works.</p><h2 id="how-apple-upgrade-works">How Apple Upgrade 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:692px;"><p class="vanilla-image-block" style="padding-top:56.36%;"><img id="LAQo6BPWq3WqYSvFeCV5hY" name="Apple-Upgrade-hero_big.jpg.medium" alt="Apple Upgrade program" src="https://cdn.mos.cms.futurecdn.net/LAQo6BPWq3WqYSvFeCV5hY.jpg" mos="" align="middle" fullscreen="" width="692" height="390" 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>Apple Upgrade offers 12- or 24-month lease terms for eligible iPhones and Apple Watches. For those seeking a Mac or iPad, there are 24- or 36-month options. </p><p>Prices start as low as $11.99 per month for the Apple Watch and iPad, depending on size and storage capacity. iPhones start at $17.99, while Macs can be leased starting at $24.99 a month.</p><p>You can sign up online or at an Apple Store, where you will be approved by Klarna, which does require a soft credit check that should not impact your credit score. </p><p>At the end of the lease term, you can return the device or upgrade to a newer generation or purchase it with a one-time payment.</p><p>Compared to the outgoing iPhone Upgrade program, the Apple Upgrade Program does not include AppleCare, which is a separate subscription price and varies in price depending on your device.</p><p>Per <a href="https://www.macrumors.com/2026/07/28/apple-upgrade-program-klarna/" target="_blank">MacRumors</a>, if you miss a payment, it will be rolled into the next month's payment with no late fees. However, if you miss three consecutive payments, the lease will end, and you will have to pay the full outstanding balance, minus the value of the device when returned. If Klarna can't collect, a debt collection agency will be sent your information.</p><h2 id="apple-upgrade-prices">Apple Upgrade prices</h2><p>Apple is offering the entire iPhone 17 lineup, plus the iPhone Air, both the Apple Watch Series 11 and Apple Watch Ultra 3 and three iPad options, including the iPad Air, iPad Pro and iPad mini.</p><p>For Macs, you can lease the MacBook Air, MacBook Pro, iMac and Mac Studio. </p><p>Apple defaults to the 24-month leasing option, so we'll share that. The other options can lower or raise your price. Additionally, higher storage capacity or chip versions will also increase the monthly price.</p><p>Finally, the price does not include taxes and fees.</p><p>Here's how much the base model of each device will cost you. </p><div ><table><caption>Apple Upgrade Prices - iPhones and Watches</caption><thead><tr><th class="firstcol " ><p>Device</p></th><th  ><p>Upfront cost</p></th><th  ><p>Per month cost</p></th><th  ><p><strong>Total after 24 months</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPhone 17e</strong></p></td><td  ><p>$599</p></td><td  ><p>$17.99</p></td><td  ><p>$431.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Air</strong></p></td><td  ><p>$999</p></td><td  ><p>$28.99</p></td><td  ><p>$695.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17</strong></p></td><td  ><p>$799</p></td><td  ><p>$22.99</p></td><td  ><p>$551.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro</strong></p></td><td  ><p>$1,099</p></td><td  ><p>$31.99</p></td><td  ><p>$767.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>$1,199</p></td><td  ><p>$34.99</p></td><td  ><p>$839.76</p></td></tr><tr><td class="firstcol " ><p><strong>Apple Watch Series 11</strong></p></td><td  ><p>$399</p></td><td  ><p>$11.99</p></td><td  ><p>$287.76</p></td></tr><tr><td class="firstcol " ><p><strong>Apple Watch Ultra 3</strong></p></td><td  ><p>$799</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr></tbody></table></div><p>We've separated the iPads and Macs out because these devices can have the longer 36-month term. Again, the prices below are for the base model of each device and the 24-month term.</p><div ><table><caption>Apple Upgrade Prices - Macs and iPads</caption><thead><tr><th class="firstcol " ><p>Device</p></th><th  ><p>Upfront cost</p></th><th  ><p>Per month cost</p></th><th  ><p><strong>Total after 24 months</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPad Air</strong></p></td><td  ><p>$749</p></td><td  ><p>$15.99</p></td><td  ><p>$383.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPad Pro</strong></p></td><td  ><p>$1,199</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPad mini</strong></p></td><td  ><p>$599</p></td><td  ><p>$11.99</p></td><td  ><p>$287.76</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Air</strong></p></td><td  ><p>$1,299</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Pro</strong></p></td><td  ><p>$1,999</p></td><td  ><p>$38.99</p></td><td  ><p>$935.76</p></td></tr><tr><td class="firstcol " ><p><strong>iMac</strong></p></td><td  ><p>$1,499</p></td><td  ><p>$28.99</p></td><td  ><p>695.75</p></td></tr><tr><td class="firstcol " ><p><strong>Mac Studio</strong></p></td><td  ><p>$2,499</p></td><td  ><p>$48.99</p></td><td  ><p>$1,175.76</p></td></tr></tbody></table></div><h2 id="no-leasing-entry-level-devices">No leasing entry-level 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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XAXaMxrdpoER4r7t5G88jh" name="mac-mini-front.jpg" alt="New Mac mini just leaked — what you need to know" src="https://cdn.mos.cms.futurecdn.net/XAXaMxrdpoER4r7t5G88jh.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: Jon Prosser & Ian Zelbo)</span></figcaption></figure><p>You may have noticed several Apple devices aren't eligible for the upgrade program. It includes the vanilla iPhone 16 and iPhone 16 Plus, as well as the entry-level models of almost every device category. </p><p>Here's the full list of Apple products you can't lease:</p><ul><li>iPhone 16</li><li>iPhone 16 Plus</li><li>Apple Watch SE</li><li>MacBook Neo</li><li>Mac mini</li><li>iPad (A16)</li><li>Studio Display</li></ul><h2 id="availability">Availability</h2><p>Apple Upgrade is available now for all of the listed devices. Apple says that a security deposit is not required and that a trade-in device could reduce monthly payments. </p><p>I will note that if you end a lease early, you could see termination fees. Also, if you don't do anything at the end of the lease, you'll be charged the purchase fee. </p><p>Lastly, hidden in the fine print, upgrading a device could increase your monthly payments, which is true for both higher-capacity versions of devices and more expensive models when new generations launch in the coming years.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/we-asked-368-people-what-they-want-from-the-apple-watch-ultra-4-heres-the-resounding-answer-and-its-not-ai">We asked 368 people what they want from the Apple Watch Ultra 4. Here’s the resounding answer (and it’s not AI)</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use">iOS 27 finally fixes the most annoying iPhone workaround we all use</a></li><li><a href="https://www.tomsguide.com/phones/iphones/new-iphone-20-video-reveals-the-8-biggest-upgrades-to-expect-from-the-20th-anniversary-iphone">New iPhone 20 video reveals the 8 biggest upgrades to expect from the 20th anniversary iPhone</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ New iPhone 20 video reveals the 8 biggest upgrades to expect from the 20th anniversary iPhone ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/new-iphone-20-video-reveals-the-8-biggest-upgrades-to-expect-from-the-20th-anniversary-iphone</link>
                                                                            <description>
                            <![CDATA[ A new video reveals eight upgrades that we can potentially expect to see in the iPhone 20 next year. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">T6mPwyYa4cUfgWEddWCYpf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/r2pW7STcGyqWJttRcb5SAH-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 28 Jul 2026 12:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 14:23:01 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/r2pW7STcGyqWJttRcb5SAH-1280-80.jpg">
                                                            <media:credit><![CDATA[AppleTrack]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone 20 render]]></media:description>                                                            <media:text><![CDATA[iPhone 20 render]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone 20 render]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/r2pW7STcGyqWJttRcb5SAH-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple is supposed to introduce its next iPhone, including the rumored <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> in a month and a half. But who cares about that when the intriguing 20th anniversary iPhone leaks are starting to pick up steam?</p><p>The latest batch of rumors comes from the leak-tracking YouTuber AppleTrack, who covered eight major upgrades potentially coming to the iPhone 20 in <a href="https://www.youtube.com/watch?v=RrtQG_jxswM" target="_blank">his latest video</a>.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/RrtQG_jxswM" allowfullscreen></iframe></div></div><p>The updates cover everything from the all-glass curved display to better internal components, including a bigger main camera and new battery technology.</p><h2 id="all-glass-everything">All glass everything</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1355px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="66rdtKsZd3eqsFETAE5tiM" name="Screenshot 2025-08-11 150943" alt="iphone all glass design patent, possibly iphone 20 like design" src="https://cdn.mos.cms.futurecdn.net/66rdtKsZd3eqsFETAE5tiM.png" mos="" align="middle" fullscreen="" width="1355" height="762" attribution="" endorsement="" 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 <a href="https://www.tomsguide.com/phones/iphones/apple-just-revealed-what-the-all-glass-iphone-of-the-future-could-look-like-and-its-something-to-behold">more consistent rumors</a> we've seen is that Apple plans on making the 20th anniversary nearly all-glass, starting with the display.</p><p>AppleTrack alleges that Apple has codenamed the next iPhone "Glasswing" after a type of butterfly with see-through wings. Check out <a href="https://www.pbs.org/wnet/nature/blog/inside-nature-featured-creature-glass-wing-butterfly/" target="_blank">this blog</a> on the Greta Oto from PBS for a picture of the transparent butterfly.</p><p>Simply, as we've seen before, the <a href="https://www.tomsguide.com/phones/iphones/iphone-20s-all-glass-design-sounds-like-a-sight-to-behold-and-prototypes-might-already-exist">iPhone 20 will be bezel-less</a> with a quad-curved display that is seamlessly attached to the glass and ceramic back panel.</p><h2 id="curvy">Curvy</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WzBYJU756YUghSPNK6QiLD" name="Apple Messages app.jpg" alt="Apple Messages app on iPhone" src="https://cdn.mos.cms.futurecdn.net/WzBYJU756YUghSPNK6QiLD.jpg" mos="" align="middle" fullscreen="" width="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>Continuing with the display, the curved design could come in two sizes: 6.3 inches and 6.9 inches. iPhones are already fairly round, but this new design could make them even curvier. </p><p>If you want an existing reference, Apple's own <a href="https://www.tomsguide.com/reviews/apple-watch-7">Watch Series 7</a> hints at how the iPhone 20 might look. There shouldn't be side bezels, and it should look all of a piece compared to the two-tone currently on the iPhone 17 Pro.</p><h2 id="sinking-the-island">Sinking the island</h2><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="bECvotBq9MSRFJ8p5ZtVDa" name="iPhone 17 Center Stage camera" alt="iPhone 17 Center Stage camera." src="https://cdn.mos.cms.futurecdn.net/bECvotBq9MSRFJ8p5ZtVDa.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>Since the Dynamic Island was introduced with the iPhone 14 Pro and Pro Max, there have been rumors that Apple is trying to reduce or remove the cutouts for the front-facing camera and Face ID.</p><p>Instead, Apple would replace it with under-display technology that conceals those features below the screen. It would also mean a smaller or even non-existent Dynamic Island </p><p>This is the most grain-of-salt rumor that keeps recurring. I'll believe this one when I actually see it.</p><h2 id="huge-main-camera">Huge main 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:1389px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="toU4fWQ9sWzS23fzVmrKyV" name="iphone 17 pro" alt="iphone 17 pro dummy unit camera shot" src="https://cdn.mos.cms.futurecdn.net/toU4fWQ9sWzS23fzVmrKyV.png" mos="" align="middle" fullscreen="" width="1389" height="781" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Majin Bu)</span></figcaption></figure><p>Currently, the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-pro-review">iPhone 17 Pro</a> features a lineup of 48 MP rear cameras, including the main, ultrawide and telephoto lenses. However, per AppleTrack, the iPhone 20 is going to make a massive leap to a 200MP sensor, at least for the main camera, which would match Samsung's Ultra Galaxy S series phones.</p><p>This does match <a href="https://www.tomsguide.com/phones/iphones/future-iphones-could-pack-a-200mp-camera-heres-what-that-means-for-you">rumors from earlier this year</a> that Apple is testing out a 1/1.12-inch sensor to boost its cameras to 200MP. Though at the time it wasn't clear when this new camera would launch.</p><h2 id="image-stabilization">Image stabilization</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:602px;"><p class="vanilla-image-block" style="padding-top:66.78%;"><img id="RvMMpWCkUhhNnJoDNwgHf" name="" alt="OIS moves the lens to counteract jitters when holding the camera | Credit: Apple" src="https://cdn.mos.cms.futurecdn.net/RvMMpWCkUhhNnJoDNwgHf.png" mos="" align="middle" fullscreen="" width="602" height="402" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OIS moves the lens to counteract jitters when holding the camera | Credit: Apple)</span></figcaption></figure><p>Alongside a huge main camera, the ultrawide lens is supposed to get optical image stabilization. Basically, this makes recording videos smoother and less jittery. </p><p>The <a href="https://www.tomsguide.com/features/i-just-tested-the-iphone-15-pro-maxs-5x-zoom-and-this-blew-me-away">telephoto lens already features this tool,</a> which helps, but you're more likely to use the ultrawide when recording video. So this should make movies even smoother.</p><h2 id="new-buttons">New buttons</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3si6ics3avZ4adMaLSaPN4" name="iPhone 16 Pro-10.jpg" alt="iPhone 16 Pro Camera Control button" src="https://cdn.mos.cms.futurecdn.net/3si6ics3avZ4adMaLSaPN4.jpg" mos="" align="middle" fullscreen="" width="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>Clickable buttons may be a thing of the past with the iPhone 20. It's rumored that Apple will get rid of buttons for solid-state ones that provide haptic feedback. This is supposed to make the iPhone 20 more water-resistant. </p><p>Similar to the under-display rumors, <a href="https://www.tomsguide.com/news/iphone-15-pro-could-kill-physical-buttons-for-haptics-heres-what-we-know">haptic buttons have been rumored </a>since at least 2022. We even <a href="https://www.tomsguide.com/phones/iphones/no-more-buttons-iphone-20-design-just-leaked">reported on a patent for haptic buttons</a> on the iPhone 20 last October. </p><p>In the case of the iPhone 20, it actually makes sense considering the all-glass design. I rate this one as more than likely if the display rumors are true.</p><h2 id="no-more-speakers">No more speakers?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4246px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="XgM4zGB2uQ4D6pFnSmW2E9" name="TG_iPhone-SE-2022-2.jpg" alt="iPhone SE 2022 Lightning port" src="https://cdn.mos.cms.futurecdn.net/XgM4zGB2uQ4D6pFnSmW2E9.jpg" mos="" align="middle" fullscreen="" width="4246" height="2388" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>This rumor is wild and the first we've heard of it. Apparently, Apple might remove the speaker grill on the bottom of the iPhone 20. </p><p>Instead, Apple would use a "vibration technology" without the need for a speaker cutout. The vibrations would be responsible for the sound. Allegedly, this will debut with an<a href="https://www.tomsguide.com/computing/ipads/first-oled-ipad-mini-tipped-for-october-launch-heres-why-im-excited-and-worried"> OLED iPad mini </a>that is supposed to launch later this year. I'm very curious about this one.</p><h2 id="better-batteries">Better batteries</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1778px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="qKhePQUUQ92AzWUbureB6W" name="oppo-silicon-carbon-battery" alt="Oppo silicon-carbon battery graphic for the Find X8 series" src="https://cdn.mos.cms.futurecdn.net/qKhePQUUQ92AzWUbureB6W.jpg" mos="" align="middle" fullscreen="" width="1778" height="1000" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Oppo)</span></figcaption></figure><p>The final rumor surrounds power and battery. First, AppleTrack says Apple will be introducing reverse wireless charging with the iPhone 20, enabled by a new battery.</p><p>Since 2024, Chinese manufacturers like Oppo and Huawei have been introducing silicon carbon batteries in their phones, enabling larger capacity batteries to be inserted into the same space as current lithium-ion ones. </p><p>Rival Samsung finally <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-is-the-first-galaxy-phone-with-a-silicon-carbon-battery-heres-why-thats-such-a-big-deal">made the leap to silicon carbon with the Z Fold 8 and Z Fold 8 Ultra</a> that were released this  July. “We have been testing silicon batteries for quite some time. We’re looking at being very — I wouldn’t say conservative — but more taking it one step at a time," Samsung's executive VP of the Z Fold series, <a href="https://www.tomsguide.com/phones/samsung-phones/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview">Jay Kim, told Tom's Guide in an interview</a>.</p><p>Apple is known for being cautious with new technology, like waiting for a crease-free display to release its version of a foldable. </p><p>The iPhone 20 could finally be Apple's time to try the new battery technology out.</p><h2 id="price-and-release-date">Price and release date</h2><p>Apple probably won't change its usual September release window, so I expect we'll see the 20th-anniversary iPhone launch in September 2027. We should also see the iPhone Ultra 2.</p><p>As for price, the iPhone 20 likely won't be cheap. <a href="https://www.tomsguide.com/computing/macbooks/apple-price-hikes-are-official-heres-how-much-more-youll-pay-for-macbooks-and-ipads-now">Apple just raised prices on everything but the iPhone</a>. However, the iPhone 18 Pro and Pro Max will give us an idea of where things are trending heading next year.</p><p>We're expecting the iPhone 18 Pro models to be $200 more expensive. Currently, the iPhone 17 Pro starts at $1,099, so the iPhone 18 Pro could cost $1,299. The 20th anniversary might go as high as $1,399 or $1,499 if trends continue.</p><p>We're still more than a year away from launch, so we have some time to twiddle our thumbs and ponder.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/apple-desktops/ive-been-an-apple-user-for-30-years-and-these-are-my-golden-rules-to-never-pay-full-price">I've been an Apple user for 30 years and these are my golden rules to never pay full price</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use">iOS 27 finally fixes the most annoying iPhone workaround we all use</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-garmin-cirqa-vs-apple-watch-11-heres-which-came-out-on-top">I walked 5,000 steps with the Garmin Cirqa vs Apple Watch 11. Here’s which came out on top</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I knew better than to carry around a naked phone — then my iPhone 17 Pro Max met the asphalt ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/i-knew-better-than-to-carry-around-a-naked-phone-then-my-iphone-17-pro-max-met-the-asphalt</link>
                                                                            <description>
                            <![CDATA[ iPhone 17 Pro Max has a history of being damaged easily, yet I still took it out without a case. Everything was fine until it wasn't, so don't make the same mistake I did. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aZi66qmFULydWSQw2irntL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/URcmVmVgz9yWTJjYyJ62Yc-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 28 Jul 2026 06:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 14:07:24 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/URcmVmVgz9yWTJjYyJ62Yc-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iphone 17 pro max on ashphalt]]></media:description>                                                            <media:text><![CDATA[iphone 17 pro max on ashphalt]]></media:text>
                                <media:title type="plain"><![CDATA[iphone 17 pro max on ashphalt]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/URcmVmVgz9yWTJjYyJ62Yc-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There was a point a couple of years ago when you could make an argument that phones didn't need cases or screen protectors. Phone makers had been adopting more durable materials,<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s24-ultra-titanium-body-put-to-the-test-heres-how-it-compares-to-the-iphone-15-pro"> titanium frames were all the rage</a>, and display glass was reaching the point where it could hold up to everyday conditions rather well.</p><p>But those days are long gone, and given everything that's happening in the phone industry it's unlikely that they'll be coming back anytime soon. And my recent experience dropping a caseless <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> proves it.</p><p>It happened yesterday afternoon while taking my son for a walk. I'd kept the iPhone 17 Pro Max in a pouch on his stroller alongside the <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt">Galaxy Z Fold 8 Ultra</a> — so they would be easily accessible to take photos with. Unfortunately, later on in the day, I didn't grab the iPhone tightly enough and, unable to catch it in time, it took a short tumble (maybe 4 feet) onto the asphalt below.</p><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="Ria4VZvXU4rUF2BFmzdCX" name="PXL_20260727_134756732" alt="iphone 17 pro max with fall damage" src="https://cdn.mos.cms.futurecdn.net/Ria4VZvXU4rUF2BFmzdCX.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>Had I been sensible, and put my iPhone in a case, things could have been different. I drop phones onto a variety of surfaces all the time, because I'm a clumsy fool, but those phones typically have some kind of protection. For some reason, I never afforded that same protection to the iPhone, and now that carelessness has come back to haunt me.</p><p>The damage is pretty minor, and nothing close to as catastrophic as it could have been had the circumstances been a little different. But I really should know better, and everyone out there should learn from my mistake.</p>        <div class="featured_product_block featured_block_hero" data-id="5f55a738-89cb-11f1-bcfe-3d5a5156b09b">            <a href="https://www.amazon.com/dp/B0FD1TT96X/" data-model-name="Spigen iPhone 17 Pro Max 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/7Nkjj2hEKhNVRN6M64t2CJ.jpg" alt="Spigen for iPhone 17 Pro Max 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 iPhone 17 Pro Max Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5f55aa4e-89cb-11f1-8669-cba60873aeb6">            <a href="https://www.amazon.com/Smartish-iPhone-17-Pro-Max-MagSafe-Slim-Grip-Magnetic-Protective-Case/dp/B0FFCQCW7V/" data-model-name="Smartish iPhone 17 Pro Max 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/uBNZJF8aAnM5Tm7LC4Wz7L.jpg" alt="Smartish Slim Grip Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Smartish</div>                                        <div class="featured__title">Smartish iPhone 17 Pro Max Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5f55a7b0-89cb-11f1-89e9-4ba116b6bfa3">            <a href="https://www.amazon.com/OtterBox-iPhone-Pro-Defender-Case/dp/B0FSNCV7VV/" data-model-name="OtterBox Defender 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/HhHDHDVTRyQd7nwxJqFA9o.jpg" alt="OtterBox iPhone 17 Pro Max Defender Pro Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>OtterBox</div>                                        <div class="featured__title">OtterBox Defender Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="a-backwards-step-for-durability">A backwards step for 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:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5DZNEbAk6PoCBvqkYSbTVo" name="PXL_20260727_134827686" alt="iphone 17 pro max with fall damage" src="https://cdn.mos.cms.futurecdn.net/5DZNEbAk6PoCBvqkYSbTVo.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>A lot of phone companies like to employ aluminum in their phones, and with good reason. It's lightweight, easy to work with, easily recycled and, perhaps most importantly, cheap. Apple was pretty quick to jump onto the stainless steel bandwagon with 2010's iPhone 4 before moving to a wrap-around steel band on <a href="https://www.tomsguide.com/us/iphone-x,review-4800.html">iPhone X</a>.</p><p>The main benefit of stainless steel is that it's considerably stronger than aluminum, though the exact difference varies depending on the specific alloy used. The downside to that strength is that steel is a lot heavier, so you're trading comfort for increased durability. </p><p>Apple's eventual <a href="https://www.tomsguide.com/opinion/iphone-15-pro-titanium-frame-seems-like-a-waste-heres-why">switch to titanium</a> on <a href="https://www.tomsguide.com/reviews/iphone-15-pro">iPhone 15 Pro</a> and <a href="https://www.tomsguide.com/reviews/iphone-15-pro-max">Pro Max</a> was designed to offer the best of both worlds, a light design that maintains the strength and durability of stainless steel. Unfortunately, Apple didn't stick to that change for very long, ditching titanium just two years later with the release of <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> series.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2268px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="5nk2oiV9EL8ebRNhXh2i8" name="PXL_20260727_134738220" alt="iphone 17 pro max with fall damage" src="https://cdn.mos.cms.futurecdn.net/v2/t:1682,l:0,cw:2268,ch:1276,q:80/5nk2oiV9EL8ebRNhXh2i8.jpg" mos="" align="middle" fullscreen="" width="2268" height="4032" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Various reasons were given for the change, most notably the fact that titanium has poor thermal conductivity and that led to reports of iPhones overheating. However, the fact that titanium is rather an expensive metal can't be ignored either. This factor also means that Apple is unlikely to return to titanium on the majority of its phones — especially since <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a> has caused component prices to rise to unprecedented highs.</p><p>This means only the devices that really need titanium, like<a href="https://www.tomsguide.com/phones/iphones/iphone-air-review"> iPhone Air </a>and (we assume) <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Ultra</a>, are likely to get that metal in the near future. </p><p>But rather than switching back to stainless steel, Apple opted to use aluminum instead. Not just any aluminum, of course. According to Apple this is an "aerospace-grade 7000-series aluminum alloy" which supposedly exceeds industry standards for hardness. </p><p>While that sounds all well and good, it doesn't change the fact that aluminum is a softer metal — and it didn't take long for people to notice just how much damage it can pick up.</p>        <div class="featured_product_block featured_block_hero" data-id="5f55a904-89cb-11f1-bd6c-7d7b62357371">            <a href="https://www.apple.com/shop/product/mgfr4zm/a/iphone-17-pro-max-silicone-case-with-magsafe-black" data-model-name="Apple iPhone 17 Pro Max 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/SsXD66PnmvegUbU8zPtdwT.jpg" alt="Iphone 17 Pro Max Silicone Case With Magsafe – Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPhone 17 Pro Max Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5f55a972-89cb-11f1-854c-432d71053336">            <a href="https://www.apple.com/shop/product/mhw54zm/a/iphone-17-pro-max-silicone-case-with-magsafe-vanilla" data-model-name="Apple iPhone 17 Pro Max 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/9YeyyyggN6tdsa8oMP8AFU.jpg" alt="Iphone 17 Pro Max Silicone Case With Magsafe – Vanilla"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPhone 17 Pro Max Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5f55a81e-89cb-11f1-80ec-63634e10714f">            <a href="https://www.amazon.com/URBAN-ARMOR-GEAR-Designed-Pathfinder/dp/B0FH53H637/" data-model-name="Urban Armor Gear Pathfinder 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/YBj76nEbfs6hEGTyBRJRZk.jpg" alt="UAG Pathfinder case in alt orange."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>URBAN ARMOR GEAR</div>                                        <div class="featured__title">Urban Armor Gear Pathfinder Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="i-knew-about-scratchgate-and-neglected-to-case-up-anyway">I knew about scratchgate and neglected to case up anyway</h2><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="n6xpM6nipaVz6ykHnozfG" name="PXL_20260727_134813339" alt="iphone 17 pro max with fall damage" src="https://cdn.mos.cms.futurecdn.net/n6xpM6nipaVz6ykHnozfG.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The first reports of what became known as "<a href="https://www.tomsguide.com/phones/iphones/iphone-17-scratchgate-ive-had-my-iphone-17-pro-for-over-a-week-and-its-already-scuffed">scratchgate</a>" started happening within days of the iPhone 17 Pro being released. Users were reporting damage occurring to the back of their iPhone, particularly around the raised edges of the phone's protruding camera bar — also known as the forged plateau.</p><p>People were noticing that the anodized layer was getting damaged, exposing the silver aluminum underneath. <a href="https://www.tomsguide.com/phones/iphones/apple-responds-to-iphone-17-scratchgate-worn-magsafe-risers-to-blame-for-material-transfer">Apple did respond</a>, even going so far as to claim that some of the scratches <a href="https://www.tomsguide.com/phones/iphones/apple-responds-to-iphone-17-scratchgate-worn-magsafe-risers-to-blame-for-material-transfer">weren't actually scratches at all</a> and could be wiped away.</p><p>Some of us here at<a href="https://www.tomsguide.com/phones/iphones/iphone-17-scratchgate-ive-had-my-iphone-17-pro-for-over-a-week-and-its-already-scuffed"> </a>Tom's Guide experienced the issue first hand, to varying degrees, and even my iPhone 17 Pro Max had some minor scratches that came from everyday use. Now, though, it's collected a few dents and a scratch along the edge of the ultrawide camera lens. It's purely cosmetic damage, and doesn't actually affect the day-to-day workings of the phone, but I'm still kicking myself for letting it happen. </p><p>Because, let's be completely honest here, I could just have easily done some serious damage. All it would have taken is if the fall had been a little higher, or the phone had landed at a slightly different angle, and suddenly you have a busted phone or cracked screen that needs fixing ASAP.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eG24DX"></div>                            </div>                            <script src="https://kwizly.com/embed/eG24DX.js" async></script>        <div class="featured_product_block featured_block_hero" data-id="5f55a896-89cb-11f1-b5f7-1fea82bd508b">            <a href="https://www.amazon.com/URBAN-ARMOR-GEAR-Designed-Pathfinder/dp/B0FH52337S/" data-model-name="Urban Armor Gear Pathfinder 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/FZHbDcjgPcZsuD84dBaeBj.jpg" alt="Urban Armor Gear Pathfinder Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>URBAN ARMOR GEAR</div>                                        <div class="featured__title">Urban Armor Gear Pathfinder Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5f55a9e0-89cb-11f1-9714-ed4782a05c04">            <a href="https://www.amazon.com/Mous-iPhone-Case-Compatible-MagSafe/dp/B0FHGH5C7L/" data-model-name="Mous Limitless 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/L6gjYdVmFnKgyxKJoaLxij.jpg" alt="Mous Limitless 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 Limitless Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5f55aabc-89cb-11f1-99d8-9506c79e9dfb">            <a href="https://www.amazon.com/NOMAD-Traditional-Leather-Compatible-Charging/dp/B0FPP4V6BN/" data-model-name="Nomad Traditional Leather 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/EVAs57DjSpTG6KohDEjCPN.jpg" alt="Nomad Traditional Leather Case Brown Compatible With Iphone 17 Pro Max Leather Magsafe Charging Compatible Phone Case for Iphone 17 Pro Max"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>NOMAD</div>                                        <div class="featured__title">Nomad Traditional Leather Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="don-t-make-the-same-mistake-i-did">Don't make the same mistake I did</h2><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="ygbvHfhUKrmCyVQoxqPVXo" name="PXL_20260727_134843232" alt="iphone 17 pro max with fall damage" src="https://cdn.mos.cms.futurecdn.net/ygbvHfhUKrmCyVQoxqPVXo.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>Everyone out there should learn from my mistakes, and let this be a lesson in over-protectiveness. Your phone is an expensive device, and a split-second fumble could be the difference between it lasting through the day and needing an expensive out of warranty repair. I got lucky this time, but the next accidental drop may actually take out my iPhone 17 Pro Max — which is the absolute last thing I need to happen.</p><p>The fact that phone companies are looking for ways to help cut costs also means that durability is potentially one of the things that gets cut. We know this has happened to Pro-tier iPhones, but we've also seen other companies pull similar tricks. The Samsung Galaxy S26 Ultra is made of aluminum too, a downgrade from the titanium <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-ultra-review">S25 Ultra</a> and <a href="https://www.tomsguide.com/reviews/samsung-galaxy-s24-ultra">S24 Ultra</a> of previous years.</p><p>This means protecting your phone is about to be even more important than ever. You don't need an expensive bulky shock-absorbing case that can survive a nuclear blast, but you should have something to help keep the thing safe from falls and other accidental damage. </p><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="i3rdcp8WvboGhNkjb7xXWc" name="PXL_20260727_134715913a" alt="iphone 17 pro max on ashphalt" src="https://cdn.mos.cms.futurecdn.net/i3rdcp8WvboGhNkjb7xXWc.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>Likewise, a screen protector is crucial to protect the most important part of the phone itself. Believe me, nothing is worse than having a phone that would be working perfectly well, if it weren't for the cracked screen making it totally unusable. I had to swap out my Sony Xperia Z3 because of this about a decade ago, simply because nobody could get the right parts to repair it.</p><p>Even Apple's <a href="https://www.tomsguide.com/phones/iphones/iphone-17-and-iphone-air-durability-testing-heres-how-the-new-iphones-stand-up-to-bending-scratching-and-dropping">Ceramic Shield 2</a>, which is regarded as one of the best and strongest display glasses out there, isn't perfect. It's still glass, and glass will break under the right conditions. Once that happens, an official Apple screen repair is going to set you back $379 if you don't have AppleCare+, or $29 (plus the $140 annual fee) if you do. The cost of a semi-competent case and a screen protector is a fraction of that price — not to mention it saves you the hassle of getting the repair sorted.</p><p>That's a best case scenario in terms of major damage. Worst case is that your phone needs completely replacing. With iPhone 17 Pro Maxs starting at $1,199, and rumors that <a href="https://www.tomsguide.com/phones/iphones/analysts-warn-the-iphone-18-price-hike-could-be-worse-than-we-thought">prices could rise by as much as $200</a> for the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-rumors-and-leaks-everything-we-know-so-far">iPhone 18 Pro Max</a>, you do not want to face the prospect of paying it all a second time due to your own carelessness.</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-tried-using-the-galaxy-z-fold-8s-myfancam-on-my-dogs-but-i-hit-a-major-wall">I tried using the Galaxy Z Fold 8’s MyFanCam on my dogs, but I hit a major wall</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use">iOS 27 finally fixes the most annoying iPhone workaround we all use</a></li><li><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">Galaxy Z Fold 8 Ultra doesn't have a crease-free display — but it's the closest Samsung has ever got to one</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I took the Galaxy Z Fold 8 Ultra vs Fold 7 outside — and the difference is so drastic people think I faked the results ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing</link>
                                                                            <description>
                            <![CDATA[ The Galaxy Z Fold 8's main display isn't just brighter to make outdoor viewing a breeze, but there's significantly less glare too. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">gUy3yyHsdRNHjYAtu7LYYe</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/C8EuTanEP7wbQzDjYxgRUZ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 28 Jul 2026 05:15:00 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 14:04:58 +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.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/C8EuTanEP7wbQzDjYxgRUZ-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 Ultra next to Fold 7 outside]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 Ultra next to Fold 7 outside]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 Ultra next to Fold 7 outside]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/C8EuTanEP7wbQzDjYxgRUZ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I don't post to TikTok very often, but I was so floored by what I saw when testing the Galaxy Z Fold 8 Ultra outside I had to post something.</p><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Galaxy Z Fold 8 Ultra</a> (and regular <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Galaxy Z Fold 8</a>) both have an anti-reflective coating on their main displays. That means there's less glare on the screen when you're outdoors compared to the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a>. A lot less.</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>As you can see in the above clip, the Galaxy Z Fold 8 maintains wide viewing angles and doesn't suffer from nearly as many reflections as the Fold 7 when showing a photo of a magenta zinnia flower.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMqvAe"></div>                            </div>                            <script src="https://kwizly.com/embed/eMqvAe.js" async></script><p>This makes a huge difference in everyday utility when you're trying to use your foldable phone outside.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LEGFFw868pqvvTLe5fDgAZ" name="fold 8 ultra vs fold 7 displays" alt="Galaxy Z Fold 8 Ultra display vs Fold 7 close-up showing the crease on Fold 7" src="https://cdn.mos.cms.futurecdn.net/LEGFFw868pqvvTLe5fDgAZ.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>You'll also notice that the crease on the Fold 7 is a lot more prominent. The Fold 8 Ultra employs new Flex Titanium technology to minimize the crease. It's definitely still there, but a lot more subtle.</p><div class="product"><a data-dimension112="06db6f0a-89ff-11f1-bbf7-1d407ef1397a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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.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 preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="06db6f0a-89ff-11f1-bbf7-1d407ef1397a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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="06db6f0a-89ff-11f1-bbf7-1d407ef1397a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Brightness</strong><br><strong>(Nits, HDR)</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>Galaxy Z Fold 8</strong></p></td><td  ><p>2,649</p></td><td  ><p>82%/95.4% (Natural/Vivid)</p></td><td  ><p>0.21/0.25 (Natural/Vivid)</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>2,687</p></td><td  ><p>82.6%/95.3% (Natural/Vivid)</p></td><td  ><p>0.2/0.27 (Natural/Vivid)</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>2,310</p></td><td  ><p>96%/105.2% (Natural/Vivid)</p></td><td  ><p>0.22/0.28 (Natural/Vivid)</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold </strong></p></td><td  ><p>1,233</p></td><td  ><p>88.5%/159.6% (Natural/Vivid)</p></td><td  ><p>0.2/0.35<br>(Natural/Vivid)</p></td></tr></tbody></table></div><p>It also helps that the Galaxy Z Fold 8 Ultra's display is brighter than the Fold 7. In our lab tests, the Fold 8 Ultra's 8-inch display reached 2,687 nits of brightness. That's a pretty big jump from the 2,310 nits we measured on the 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wHB8qpYiB96GnfKYVQusW3" name="fold 8 ultra vs fold 7 sun" alt="Galaxy Z Fold 8 Ultra vs Fold 7 in direct sunlight" src="https://cdn.mos.cms.futurecdn.net/wHB8qpYiB96GnfKYVQusW3.jpg" mos="" align="middle" fullscreen="" width="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>To be clear, neither display is perfect in super strong direct sunlight. But you can see in this photo, the Fold 8 Ultra's screen indeed looks brighter and the crease is still way less prominent. </p><p>I've gotten a ton of comments on my TikTok video, some claiming that the test is rigged. I did use each phone to take the same exact photo of the same flower seconds apart, then displayed them at full screen and maximum brightness. </p><p>To be more scientific, I should have used the same exact image, but I don't think the results would have been materially different.</p><p>Is this enough of a leap to justify upgrading from a Galaxy Z Fold 7 to a Fold 8 or Fold 8 Ultra? Not really. But the anti-reflective coating is super impressive — and will certainly make Fold 7 owners jealous.</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/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview"><strong>Samsung exec weighs in on iPhone Ultra threat</strong></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"><strong>Galaxy Z Fold 8 preorder deals: here's how I'm saving up to $1,200 on Samsung's new phones</strong></a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/my-first-36-hours-with-the-samsung-galaxy-z-fold-8-i-was-wrong-about-the-passport-screen-but-that-usd1-899-price-still-stings"><strong>My first 36 hours with the Samsung Galaxy Z Fold 8: I was wrong</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Verizon is knocking up to $1,200 off Galaxy Z Fold 8 preorders: how to get yours ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/verizon-is-knocking-up-to-usd1-200-off-galaxy-z-fold-8-preorders-how-to-get-yours</link>
                                                                            <description>
                            <![CDATA[ Verizon is knocking up to $1,200 off Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra preorders. Here's how you can save big on Samsung's newest foldables. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">rLBQSzSbnrz4PeYcBgHdQ8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JFBEU989UXH8gTTU2HryEL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 27 Jul 2026 21:32:05 +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.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&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;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.&amp;nbsp;&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/JFBEU989UXH8gTTU2HryEL-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8 held in front of a wall with graffiti]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8 held in front of a wall with graffiti]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8 held in front of a wall with graffiti]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JFBEU989UXH8gTTU2HryEL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We're still days away from the official release of Samsung's new foldable phones, but if you want to get your preorder on, one carrier is offering an epic deal you can't miss. </p><p>For a limited time, <a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow">Verizon is taking up to $1,200 off Galaxy Z Fold 8 preorders</a> or <a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?sku=sku6049270?isMyPlanFlow=true" target="_blank" rel="nofollow">up to $1,200 off Galaxy Z Fold 8 Ultra preorders</a>. Both offers require a trade-in and eligible data plan. Nevertheless, they're an excellent way to shave a few hundred dollars off Samsung's new phones. </p><p>For more personal recommendations, make sure to check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> homepage and our <a href="https://www.tomsguide.com/news/ultimate-back-to-school-guide">back to school deals</a> guide. Also make sure to bookmark our <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">Galaxy Z Fold 8 preorder deals</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/best-galaxy-z-flip-8-deals-get-samsungs-new-foldable-for-free">Galaxy Z Flip 8 preorder deals</a> for the latest discounts.</p><figure class="inline-layout"><fw-embed-feed channel="toms_guide" playlist="5bJZYl" mode="row" player_placement="bottom-right"></fw-embed-feed></figure><div class="product"><a data-dimension112="23f2c0be-8a01-11f1-b1a9-4d464d99c996" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 preorder: 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: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.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorder: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="23f2c0be-8a01-11f1-b1a9-4d464d99c996" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 preorder: 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 the Galaxy Z Fold 8 with trade-in and select data plans. The phone features a 7.6-inch AMOLED (1848 x 2448) 120Hz main display, 5.5-inch AMOLED (1248 x 1972) 120Hz cover display, Snapdragon 8 Elite Gen 5 for Galaxy chipset, 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 multitasking is way more suitable on its canvas, with up to four apps running simultaneously.<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="23f2c0be-8a01-11f1-b1a9-4d464d99c996" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="23f2c136-8a01-11f1-a81c-1dca9152d175" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?sku=sku6049270?isMyPlanFlow=true" 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.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra preorder: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?sku=sku6049270?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="23f2c136-8a01-11f1-a81c-1dca9152d175" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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 the Galaxy Z Fold 8 Ultra with trade-in and select data plans. 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 Gen 5 for Galaxy chipset, 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 hands-on</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.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?sku=sku6049270?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="23f2c136-8a01-11f1-a81c-1dca9152d175" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><p>One of the biggest differences between the Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra comes to down to display size. The Galaxy Z Fold 8 has a wider design that gives it an aspect ratio similar to an iPad mini, making it more suitable for watching videos.</p><p>It also steals the most unique features of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-trifold-review">Galaxy Z TriFold</a>: its three-app side-by-side multitasking. While the more expensive <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Galaxy Z Fold 8 Ultra</a> can run up to four apps simultaneously, the Z Fold 8 has the inherent advantage because of how it lays them out. It can run three apps in their own windows, all at the same time — which it can do thanks to its 7.6-inch main display. What's great about this layout is that all three windows remain proportionate, with the ability to save them as an app pair shortcut for quick access later. And if you need just one more app, you can launch a fourth in a separate floating window.</p><p>Meanwhile, the Galaxy Z Fold 8 Ultra has a more square aspect ratio when opened. We tried running three apps on the Galaxy Z Fold 8 Ultra's 8-inch main display, but it would only let you run two properly. Sure, you can introduce a third app, but it forces the layout to change so that one app remains in full view on one side, while the other two share the remaining half. This isn’t ideal because those two apps get shrunken down to the point where they're almost unusable.</p><p>Bottom line: If you're looking to multitask Galaxy Z Fold 8 is the winner. </p><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Samsung Galaxy Z Fold 8</p></th><th  ><p>Samsung Galaxy Z Fold 8 Ultra</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $1,899 / £1,699</p></td><td  ><p>From $2,099 / £1,899</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong></p></td><td  ><p>7.6 inches AMOLED (1848 x 2448, 1-120Hz)</p></td><td  ><p>8 inches AMOLED (2504 x 2256, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>5.5 inches AMOLED (1248 x 1972, 1-120Hz) </p></td><td  ><p>6.5 inches AMOLED (1080 x 2520, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</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>Rear cameras</strong></p></td><td  ><p>50MP wide, 50MP Ultra wide (10x digital zoom)</p></td><td  ><p>200MP wide, 50MP ultra-wide, 10MP telephoto (3x optical)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover camera</strong></p></td><td  ><p>10MP</p></td><td  ><p>10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Main display camera</strong></p></td><td  ><p>10MP (f/2.2)</p></td><td  ><p>10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired / 20W wireless</p></td><td  ><p>45W wired / 20W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,800 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>123.9 x 81.9 x 9.7 mm (folded), 161.4 x 123.9 x 4.5 mm (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.16 inches) unfolded</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>201 grams (7 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><strong>Colors</strong> </p></td><td  ><p>Lavender, Graphite, Cream, Pistachio (online)</p></td><td  ><p>Violet shadow, Cream, Graphite, Violet Green (online exclusive)</p></td></tr></tbody></table></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ T-Mobile went down: Recap as users reported no signal across the US ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/news/live/t-mobile-outage-july-27-2026</link>
                                                                            <description>
                            <![CDATA[ T-Mobile went down. Here's what happened during yesterday's outage ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">grLHArGqku7tcuYHGbCFeG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ptkVVhGkVq4jB5b3kpG42m-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 27 Jul 2026 21:22:57 +0000</pubDate>                                                                                                                                <updated>Tue, 28 Jul 2026 09:37:30 +0000</updated>
                                                                                                                                            <category><![CDATA[Network Carriers]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ptkVVhGkVq4jB5b3kpG42m-1280-80.jpg">
                                                            <media:credit><![CDATA[ehrlif/Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The exterior of a T-Mobile store on the Las Vegas Strip in Paradise, Nevada.]]></media:description>                                                            <media:text><![CDATA[The exterior of a T-Mobile store on the Las Vegas Strip in Paradise, Nevada.]]></media:text>
                                <media:title type="plain"><![CDATA[The exterior of a T-Mobile store on the Las Vegas Strip in Paradise, Nevada.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ptkVVhGkVq4jB5b3kpG42m-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>T-Mobile suffered from a huge network outage yesterday, affecting customers across the country. </p><p>Reports suddenly spiked to over 60,000 on the outage-tracking site Down Detector where T-Mobile customers are reporting a lack of signal or service from Washington D.C. to Los Angeles and everywhere in between. </p><p>Whilst systems eventually returned to normal, it took several hours for the reports of problems to subside.</p><p>Here's how the events progressed.</p><h2 id="more-than-60-000-outage-reports">More than 60,000 outage reports</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:669px;"><p class="vanilla-image-block" style="padding-top:43.65%;"><img id="G8HjMLHWvqhpGnVXECgbwX" name="Screenshot 2026-07-27 142334" alt="T-Mobile outage 7-27-26" src="https://cdn.mos.cms.futurecdn.net/G8HjMLHWvqhpGnVXECgbwX.png" mos="" align="middle" fullscreen="" width="669" height="292" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>Over on <a href="https://downdetector.com/status/t-mobile/" target="_blank">DownDetector</a>, there are currently more than 64,000 reports from users across the country.</p><p>It appears reports started flooding in around 1:00 pm Pacific before truly spiking 30 minutes later. </p><h2 id="outage-appears-national">Outage appears National</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:623px;"><p class="vanilla-image-block" style="padding-top:66.93%;"><img id="oCZXgcwhkFbRe9eKc7jwbk" name="Screenshot 2026-07-27 142634" alt="T-Mobile outage map 7-27-26" src="https://cdn.mos.cms.futurecdn.net/oCZXgcwhkFbRe9eKc7jwbk.png" mos="" align="middle" fullscreen="" width="623" height="417" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>I'm seeing outage reports from nearly every major city in the United States and multiple states from Florida and California to North Carolina and Washington. </p><p>Minnesota, Louisana, and Hawaii are all reporting issues. </p><p>THe complaints are all similar, phones are being forced into SOS mode only, though it's not clear if WiFi calling is down as well.</p><h2 id="no-response-from-t-mobile">No response from T-Mobile</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:66.62%;"><img id="Mt43TxMJbWvMoXjmEETtjQ" name="T-Mobile-store.jpg" alt="T-mobile store" src="https://cdn.mos.cms.futurecdn.net/Mt43TxMJbWvMoXjmEETtjQ.jpg" mos="" align="middle" fullscreen="" width="1510" height="1006" attribution="" endorsement="" class="inline"></p></div></div></figure><p>T-Mobile doesn't appear to have a network status page. I have been checking the official <a href="https://x.com/TMobile" target="_blank">T-Mobile</a> and <a href="https://x.com/TMobileHelp?lang=en" target="_blank">T-Mobile</a> customer service accounts on Twitter where customers are flooding the accounts with complaints. </p><p>However, right now the company's reps are just asking people to DM or saying they're sorry the customer is having problems. </p><p>"I’m really glad you reached out and brought this to our attention. I’d be happy to help take a closer look into what’s going on. To make sure your information stays protected, please send me a DM with your contact details and we’ll continue there," is a common response.</p><p>I have yet to see acknowledgement of the outage itself.</p><h2 id="megathread-on-reddit-has-thousands-of-comments">Megathread on Reddit has thousands of comments</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rbHGs9zn43HrGiHRPeVyfn" name="reddit logo 1.shutterstock_2459885999" alt="Reddit app logo on a phone, blue background" src="https://cdn.mos.cms.futurecdn.net/rbHGs9zn43HrGiHRPeVyfn.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>I found a megathread on the<a href="https://www.reddit.com/r/tmobile/comments/1v8bw52/t_mobile_outage/" target="_blank"> T-Mobile subreddit</a> where thousands of comments are reporting issues with their phones. </p><p>One thread seems to be that iPhone users are having more issues than Android owners. It's not clear why.</p><h2 id="reports-are-declining-but-still-in-the-10s-of-thousands">Reports are declining but still in the 10s of thousands</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:668px;"><p class="vanilla-image-block" style="padding-top:45.66%;"><img id="qHyLePcBCajNDmZnsahDKL" name="Screenshot 2026-07-27 144338" alt="T-mobile outage 7-27-2026" src="https://cdn.mos.cms.futurecdn.net/qHyLePcBCajNDmZnsahDKL.png" mos="" align="middle" fullscreen="" width="668" height="305" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>On Down Detector I am seeing reports declining. There are still nearly 40,000 reports which is down from the peak of 64,000. </p><h2 id="t-mobile-messaging-changes">T-Mobile messaging changes</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tGroiBJHE7P2bCouLHLPsB" name="Twitter_X banner.jpg" alt="X/Twitter banner" src="https://cdn.mos.cms.futurecdn.net/tGroiBJHE7P2bCouLHLPsB.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tuminds)</span></figcaption></figure><p>Over on Twitter, the <a href="https://x.com/TMobileHelp/status/2081867000117129442" target="_blank">T-Mobile Help account </a>messaging has changed a bit. There still isn't an official post acknowledging the outage but this is what I'm seeing now.</p><p>"Thank you for reaching out. Our teams are actively working the reports of technical challenges impacting some customers. Any service impacts are in the process of being resolved and are our highest priority. We know how critical it is to stay connected, and every available resource is focused on resolving this as quickly as possible."</p><p>I have reached out to T-Mobile for a statement and will update if I receive one.</p><h2 id="leveling-off">Leveling 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:668px;"><p class="vanilla-image-block" style="padding-top:45.66%;"><img id="GTTmZ3ZswTQK5QjbmvLeYX" name="Screenshot 2026-07-27 144338" alt="T-Mobile outage 7-27-26" src="https://cdn.mos.cms.futurecdn.net/GTTmZ3ZswTQK5QjbmvLeYX.png" mos="" align="middle" fullscreen="" width="668" height="305" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>Reports have leveled off to around 20,000 on Down Detector and I am still seeing comments reporting where service is out like Oakland, Maryland and Long Island, New York.</p><p>One person did say that T-Mobile engineers are on the problem per a call with customer service. Though they didn't have any other information to share.</p><h2 id="t-mobile-finally-acknowledges-the-outage">T-Mobile finally acknowledges the outage</h2><div class="see-more see-more--clipped"><blockquote class="twitter-tweet hawk-ignore" data-lang="en"><p lang="en" dir="ltr">Our teams are actively working on the reports of technical challenges impacting some customers. Any service impacts are in the process of being resolved and are our highest priority. We know how critical it is to stay connected and every available resource is focused on resolving…<a href="https://twitter.com/cantworkitout/status/2081872210218881043">July 27, 2026</a></p></blockquote><div class="see-more__filter"></div></div><p>Over two hours after reports spiked on DD, T-Mobile has finally acknowledged the outage with a post on its T-Mobile Help account.</p><p>"Our teams are actively working on the reports of technical challenges impacting some customers. Any service impacts are in the process of being resolved and are our highest priority. We know how critical it is to stay connected and every available resource is focused on resolving this as quickly as possible."</p><p>Many people in the comments are saying that the outage has lasted even longer, up to 4 hours for many, and are upset with the company's silence to now.</p><h2 id="reports-continue-slow-decline">Reports continue slow decline</h2><p>Over on Down Detector, reports have been started declining again. It's not the steep drop that occurred a couple hours ago. </p><p>After holding level around 20,000, we just hit 16,000 as of 4:30 pm Pacific.</p><p>Most comments are still reporting SOS mode across the country but I have seen a couple posts about it being back up in California.</p><h2 id="taking-a-break-but-keeping-an-eye-on-things">Taking a break but keeping an eye on things</h2><p>It's getting to the end of the work day here on the West Coast. I'm taking a break to walk the dog and get some dinner going but I'll be keeping an eye on the outage and I'll let you know if anything changes.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ This tracking card lasts 50% longer than an AirTag for just $15 more — and now I never have to worry about replacing batteries ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/this-tracking-card-lasts-50-percent-longer-than-an-airtag-for-just-usd15-more-and-now-i-never-have-to-worry-about-replacing-batteries</link>
                                                                            <description>
                            <![CDATA[ At just $15 more than an AirTag, the Nomad Tracking Card Pro has an unprecedented 16-month battery life. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">S4s7oUbsHoUbDt9KTqDCxV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Fdkiaz8kEUVtUHChyCdpEU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 27 Jul 2026 09:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Fdkiaz8kEUVtUHChyCdpEU-1280-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Nomad Tracking Card Pro held in the hand.]]></media:description>                                                            <media:text><![CDATA[Nomad Tracking Card Pro held in the hand.]]></media:text>
                                <media:title type="plain"><![CDATA[Nomad Tracking Card Pro held in the hand.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Fdkiaz8kEUVtUHChyCdpEU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve put dozens of <a href="https://www.tomsguide.com/us/best-key-finders,review-2657.html">Bluetooth key finders</a>, <a href="https://www.tomsguide.com/phones/i-tried-this-airtag-clone-that-works-like-a-lifeline-for-instant-help-and-its-exactly-what-ive-been-looking-for">AirTag clones</a>, and credit-card-style trackers through their paces over the years. They’re helpful for keeping track of my gear — I keep them in my backpack, on my keychain, and inside my wallet.</p><p>Unlike <a href="https://www.tomsguide.com/reviews/apple-airtags">AirTags</a> that rely on coin batteries, many of these credit card trackers feature rechargeable batteries that last upwards of six months on a single charge. While early versions relied on proprietary chargers, newer models have adopted standard wireless charging, making them even more convenient.</p><p>The latest one I’ve been testing is the <a href="https://www.tomsguide.com/reviews/apple-airtags" target="_blank" rel="nofollow">Nomad Tracking Card Pro</a>, which goes way beyond six or twelve months of runtime. In fact, it boasts the longest rated endurance I’ve come across, clocking in at an outstanding 16 months on a single charge.</p><div class="product"><a data-dimension112="2276f0bc-878f-11f1-951b-8f7163adb61d" data-action="Deal Block" data-label="Price check: $45 @ Amazon" data-dimension48="Price check: $45 @ Amazon" data-dimension25="$45" href="https://nomadgoods.com/products/tracking-card-pro-stellar-orange" 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="dyJVh9BnhQQQzbYWLVUjG" name="Nomad Tracking Card Pro deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dyJVh9BnhQQQzbYWLVUjG.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Nomad Tracking Card Pro is a credit card-sized tracker that supports Apple's Find My network, with endurance that lasts longer than other trackers with its 16 months of battery life.<br><strong>Price check: </strong><a href="https://www.amazon.com/Tracking-16-Month-Waterproof-Polycarbonate-Rechargeable/dp/B0GBWTBZF6/" target="_blank" rel="nofollow" data-dimension112="2276f0bc-878f-11f1-951b-8f7163adb61d" data-action="Deal Block" data-label="Price check: $45 @ Amazon" data-dimension48="Price check: $45 @ Amazon" data-dimension25="$45"><strong>$45 @ Amazon</strong></a><a class="view-deal button" href="https://nomadgoods.com/products/tracking-card-pro-stellar-orange" target="_blank" rel="nofollow" data-dimension112="2276f0bc-878f-11f1-951b-8f7163adb61d" data-action="Deal Block" data-label="Price check: $45 @ Amazon" data-dimension48="Price check: $45 @ Amazon" data-dimension25="$45">View Deal</a></p></div><h2 id="sleek-metal-design-built-for-your-wallet">Sleek, metal design built for your wallet</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bjNAhmQYMZHA3vifDHk6gT" name="Nomad Tracking Card Pro" alt="Nomad Tracking Card Pro held in the hand." src="https://cdn.mos.cms.futurecdn.net/bjNAhmQYMZHA3vifDHk6gT.jpg" mos="" align="middle" fullscreen="" width="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>What immediately grabs my attention about the Nomad Tracking Card Pro is its striking finish — the vibrant Stellar Orange hue color-coordinates seamlessly with my Cosmic Orange <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-pro-review">iPhone 17 Pro</a>. But it’s the physical form factor that truly steals the show. At just 2.5mm thick and weighing 15 grams, it’s about three times thinner than the latest <a href="https://www.tomsguide.com/phones/apple-airtag-2-review">AirTag 2</a>.</p><p>Because it’s so sleek, I can stow it in my <a href="https://www.tomsguide.com/phones/i-tested-this-magsafe-wallet-for-a-month-and-now-i-cant-live-without-it-especially-at-44-percent-off">MagSafe wallet</a> with ease — whereas an AirTag forces me to use an extra holder or dedicated accessory, like my <a href="https://www.tomsguide.com/phones/i-just-tried-these-incredible-magsafe-accessories-and-they-put-apples-once-legendary-designs-to-shame">Aulumu MagSafe wallet</a>. Instead of creating an awkward bulge in my pocket, the Tracking Card Pro slides flush into a slot just like a standard credit card.</p><p>This card feels remarkably premium thanks to its aluminum frame, giving it a solid, substantial weight compared to the cheap, plasticky feel of rival trackers. With its clean lines and metallic finish, it looks less like a tech gadget and more like an elite credit card — sort of like the <a href="https://www.tomsguide.com/features/apple-card-italy">Apple Card</a> — sitting in my wallet.</p><h2 id="endurance-that-puts-battery-anxiety-to-rest">Endurance that puts battery anxiety to rest</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2zGrTQTUspn7zSs4cvFHUU" name="Nomad Tracking Card Pro" alt="Nomad Tracking Card Pro charging in MagSafe charger." src="https://cdn.mos.cms.futurecdn.net/2zGrTQTUspn7zSs4cvFHUU.jpg" mos="" align="middle" fullscreen="" width="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 beauty of Bluetooth trackers like the AirTag is that you don’t have to worry about constantly recharging them. Now, I’ll admit that 16 months is a ridiculously long time — so much so that I might lose track of when I last charged it. But I much prefer this setup over having to swap out disposable coin batteries.</p><p>I’ve been using the Nomad Tracking Card Pro for about a month now, and the battery level in Apple's Find My app still shows a full charge. With its 16-month rating on a single charge, it easily blows past the six- to twelve-month average of other rechargeable finders and completely outclasses the 7-month runtime of Nomad’s original model. It’s a genuine set-it-and-forget-it piece of gear, meaning it’s one less device I need to manage.</p><p>When the time finally does come to top it off, I won't have to fiddle with proprietary dongles or tiny charging clips. Thanks to built-in wireless charging, I can simply drop it onto any standard Qi or MagSafe charger. The magnetic alignment snaps it right into place, making the whole recharge process completely effortless.</p><h2 id="well-worth-the-upgrade">Well worth the Upgrade</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/REjtxVKp7WQA9SKE7nSN7b.jpg" alt="Nomad Tracking Card Pro." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/2AS7oCR68CMCBktExXNwRS.jpg" alt="Nomad ChargeKey." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/33y23Qyjf5kxzQZkaGdvNS.jpg" alt="Nomad ChargeKey." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iAUNkvRng4Tmh6BVkUoMWS.jpg" alt="Nomad ChargeKey." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/d62xqsu2sjEZdt66XgDVjW.jpg" alt="Nomad Stand One." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XDysVkD7fDteeLprScTGnW.jpg" alt="Nomad Stand One." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/7XsPXUQGAkM86D68NkSEtW.jpg" alt="Nomad Stand One." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>At around $15 more than a standard AirTag, the Nomad Tracking Card Pro is an easy recommendation and well worth the small premium. You’re not just paying for a tracker — you’re upgrading to a sleek, metallic credit-card form factor that slides flush into any wallet slot, complete with convenient wireless charging and an unmatched 16-month battery life.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W3KbJW"></div>                            </div>                            <script src="https://kwizly.com/embed/W3KbJW.js" async></script><p>For those who love to color-coordinate, Nomad offers other everyday carry gear in its matching Stellar Orange finish — like the compact <a href="https://nomadgoods.com/products/chargekey-v2-stellar-orange" target="_blank" rel="nofollow">ChargeKey</a> and the <a href="https://nomadgoods.com/products/stand-one-4th-gen-stellar-orange" target="_blank" rel="nofollow">Stand One</a> charger.</p><p>Together, they create a strikingly cohesive setup that perfectly complements my Cosmic Orange iPhone 17 Pro. With the ChargeKey on my keyring, I never have to worry about packing a spare USB-C cable. Meanwhile, the Stand One delivers full 25W Qi2 fast charging, keeping my phone topped off at peak speeds while looking great on my desk.</p><div class="product"><a data-dimension112="6210a4fe-87a1-11f1-b24b-8973ddee9b82" data-action="Deal Block" data-label="Price check: $39 @ Amazon" data-dimension48="Price check: $39 @ Amazon" data-dimension25="$35" href="https://nomadgoods.com/products/chargekey-v2-stellar-orange" 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="2DMTec2PXdoWbo7QzqrKPH" name="Nomad ChargeKey deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2DMTec2PXdoWbo7QzqrKPH.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>You'll always have a USB-C cable on you with the Nomad ChargeKey. With its compact design, it can easily be fastened to a keychain to ensure you have one on you at all times. Plus, it's engineered to deliver up to 240W of power and 10Gbps data transfer.<br><strong>Price check: </strong><a href="https://www.amazon.com/Nomad-ChargeKey-V2-Keychain-Ultimate/dp/B0DP1M3VP6/" target="_blank" rel="nofollow" data-dimension112="6210a4fe-87a1-11f1-b24b-8973ddee9b82" data-action="Deal Block" data-label="Price check: $39 @ Amazon" data-dimension48="Price check: $39 @ Amazon" data-dimension25="$35"><strong>$39 @ Amazon</strong></a><a class="view-deal button" href="https://nomadgoods.com/products/chargekey-v2-stellar-orange" target="_blank" rel="nofollow" data-dimension112="6210a4fe-87a1-11f1-b24b-8973ddee9b82" data-action="Deal Block" data-label="Price check: $39 @ Amazon" data-dimension48="Price check: $39 @ Amazon" data-dimension25="$35">View Deal</a></p></div><div class="product"><a data-dimension112="6210a56c-87a1-11f1-be7c-1193b9eeab92" data-action="Deal Block" data-label="Price check: $139 @ Nomad" data-dimension48="Price check: $139 @ Nomad" data-dimension25="$139" href="https://www.amazon.com/NOMAD-Charging-Wireless-Weighted-Included/dp/B0H4Q6MVBW/" 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="3manm8HyicDkm47xhiud4N" name="Nomad Stand One Stellar Orange deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3manm8HyicDkm47xhiud4N.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With its 25W wireless charging speed, the Nomad Stand One ensures you're getting the fastest speed possible to recharge your iPhone 17 Pro or 17 Pro Max. There's an extra wireless charging pad for AirPods and other wireless chargers, but this one stands out for its vibrant Stellar Orange fascade.<br><strong>Price check: </strong><a href="https://nomadgoods.com/products/stand-one-4th-gen-stellar-orange" target="_blank" rel="nofollow" data-dimension112="6210a56c-87a1-11f1-be7c-1193b9eeab92" data-action="Deal Block" data-label="Price check: $139 @ Nomad" data-dimension48="Price check: $139 @ Nomad" data-dimension25="$139"><strong>$139 @ Nomad</strong></a><a class="view-deal button" href="https://www.amazon.com/NOMAD-Charging-Wireless-Weighted-Included/dp/B0H4Q6MVBW/" target="_blank" rel="nofollow" data-dimension112="6210a56c-87a1-11f1-be7c-1193b9eeab92" data-action="Deal Block" data-label="Price check: $139 @ Nomad" data-dimension48="Price check: $139 @ Nomad" data-dimension25="$139">View Deal</a></p></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt">I just spent 24 hours with the Galaxy Z fold 8 Ultra — here's what I liked and what I didn't</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview">‘We're pretty confident': How Samsung plans to fight the first foldable iPhone</a></li><li><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">I just ditched my iPhone for the Z Fold 8 — Android 17’s new migration tool is pure magic, but there is one painful catch</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I just realized the Samsung Galaxy Z Fold 8 Ultra fixes the worst thing about fingerprint scanners ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/i-just-realized-the-samsung-galaxy-z-fold-8-ultra-fixes-the-worst-thing-about-fingerprint-scanners</link>
                                                                            <description>
                            <![CDATA[ The Galaxy Z Fold 8 Ultra and other foldables managed to solve my biggest issue with biometric security, and made mapping my fingerprints a breeze. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kbYaArGnFJvwygJXXUqsTR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DMGaUbC3Xm5ezapCKdrW9f-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 27 Jul 2026 05:15: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.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/DMGaUbC3Xm5ezapCKdrW9f-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8 Ultra shown in hand]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8 Ultra shown in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8 Ultra shown in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DMGaUbC3Xm5ezapCKdrW9f-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>One thing I really hate about getting a new phone is the setup process. Not only is it somewhat tedious, the actual process is incredibly inconsistent across different devices. The last few years have seen some major improvements to the way phones are set up, but the one thing that continually gets on my nerves is registering my fingerprints for biometric security.</p><p>That changed earlier this week when I set up the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Samsung Galaxy Z Fold 8 Ultra</a>, and realized that I should probably go through the process correctly. Only then did I realize that Samsung has been sitting on one of the simplest fingerprint mapping tools I've ever come across.</p><h2 id="galaxy-foldables-have-mastered-fingerprint-mapping-on-phones">Galaxy foldables have mastered fingerprint mapping on 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="LoK247UUzdmF83TQmayS6g" name="Galaxy Z Fold 8 Ultra-12" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/LoK247UUzdmF83TQmayS6g.jpg" mos="" align="middle" fullscreen="" width="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 majority of devices that I have used over the past few years have had fingerprint scanners embedded in their display. Something about that design means that the actual process of registering a fingerprint for security reasons is a wearying experience that requires constantly tapping your chosen digit against the screen to capture the entire print.</p><p>Some systems are better than others, admittedly. Samsung's fingerprint registration is a fairly speedy affair, all things considered, while Google Pixels are among the slowest and laborious options on offer. This is still true following Google's decision to switch from optical fingerprint scanners to the more advanced (and secure) ultrasonic sensors. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:563px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="BxNRbJaK22Du2rxwcYySMb" name="ezgif-779ac4320ee377cb" alt="samsung galaxy z fold 8 ultra fingerprint scanner" src="https://cdn.mos.cms.futurecdn.net/BxNRbJaK22Du2rxwcYySMb.gif" mos="" align="middle" fullscreen="" width="563" height="315" attribution="" endorsement="" 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 Galaxy foldables do it in a totally different way. Instead of being asked to constantly lift and move your chosen digit, all you need to do is move your fingerprint over the sensor. You don't have to remove your finger unless absolutely necessary, and the whole process takes less than ten seconds to do from start to finish.</p><p>The only kind of biometric security I've set up that comes close is Apple's Face ID. Since Apple's facial recognition only requires you to rotate your head around in a circle, it's extremely easy to do. But not even devices that still utilize Apple's Touch ID can map fingerprints quite so easily.</p><p>This feature isn't limited to the new Galaxy Z Fold 8 Ultra either. The process is exactly the same on the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a> and older Galaxy foldables, too. I was just too lazy to notice before, because I had foolishly assumed modern fingerprint scanners were all the same.</p><h2 id="it-s-a-reminder-how-much-better-physical-fingerprint-scanners-are">It's a reminder how much better physical fingerprint scanners are</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bNxK6GPNEgU8BWTJwTXshC" name="fingerprint-android.jpg" alt="Fingerprint reader on an Android phone." src="https://cdn.mos.cms.futurecdn.net/bNxK6GPNEgU8BWTJwTXshC.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>It's been seven years since I regularly used a phone with a physical fingerprint scanner, but my short time with the Galaxy Z Fold 8 Ultra has reminded me just how much more convenient they are compared to modern alternatives. Not just in terms of the speedy mapping, which feels rather new to me, but also in the way they perform.</p><p>Day to day I use 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>, which features an ultrasonic in-display fingerprint scanner. Google's scanner isn't slow or inefficient by any means, but there is a brief delay between placing your finger on the scanner and the phone unlocking. That's especially true if you're not using an always-on display, as I tend to do, because you need to turn on the screen as well.</p><p>The physical fingerprint scanner takes all that out of the equation. The unlocking process is almost instant, and the fact you can feel the scanner without looking means you could potentially initiate the unlocking process before you've even looked at the phone screen. Those fractions of seconds don't matter much at the time, but if you consider how often you unlock your phone those extra fractions of seconds can add up.</p><h2 id="how-to-set-up-fingerprint-scanning-on-galaxy-z-fold-8-and-other-foldables">How to set up fingerprint scanning on Galaxy Z Fold 8 and other foldables</h2><section class="howto-block">                    <h3>1. Open biometric security</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/stAd3PmzKAuohqbmLz3ec7.jpg"                                        alt="samsung galaxy z fold 8 fingerprint scanner"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/stAd3PmzKAuohqbmLz3ec7.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>First up you need to open up the biometric security settings menu. You can do this by heading to <strong>Settings > Screen lock and biometrics > Fingerprints</strong></p></p>                </section><section class="howto-block">                    <h3>2. Add a new fingerprint</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/vJszKs6MpyZP7CnKV5mkP7.jpg"                                        alt="samsung galaxy z fold 8 fingerprint scanner"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/vJszKs6MpyZP7CnKV5mkP7.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>You'll need to start the process by tapping the <strong>Add fingerprint</strong> option half way down the page.</p></p>                </section><section class="howto-block">                    <h3>3. Start the mapping process</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/Cy49jiKXrLAEL733zQMqaT.jpg"                                        alt="galaxy z fold 8 ultra fingerprint scanner"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/Cy49jiKXrLAEL733zQMqaT.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>On the next screen, tap the <strong>Register</strong> button at the bottom of the screen.</p></p>                </section><section class="howto-block">                    <h3>4. Map your fingerprint</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/SGLcpf35ypVSoRn4fMfSkT.jpg"                                        alt="galaxy z fold 8 ultra fingerprint scanner"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/SGLcpf35ypVSoRn4fMfSkT.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Next up you'll be prompted to map your fingerprint. Simply swipe your fingerprint across the power button/fingerprint scanner until you hit 100%</p></p>                </section><section class="howto-block">                    <h3>5. Test your fingerprint</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/eHytnaSi83dCH3WJCq6pgT.jpg"                                        alt="galaxy z fold 8 ultra fingerprint scanner"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/eHytnaSi83dCH3WJCq6pgT.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>The Galaxy Z Fold 8 Ultra will then prompt you to test your fingerprint before letting you go. Just tap your finger against the scanner, and it'll tell you if everything has been registered successfully.</p></p>                </section><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/my-first-36-hours-with-the-samsung-galaxy-z-fold-8-i-was-wrong-about-the-passport-screen-but-that-usd1-899-price-still-stings">My first 36 hours with the Samsung Galaxy Z Fold 8: I was wrong about the passport screen (but that $1,899 price still stings)</a></li><li><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 delay leak right after Samsung's triumphant Galaxy Fold 8 launch has me sick of waiting for Apple's foldable</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/id-buy-a-galaxy-z-fold-8-over-the-z-fold-8-ultra-and-its-all-because-it-steals-this-z-trifold-feature">I'd buy a Galaxy Z Fold 8 over the Z Fold 8 Ultra — and it's all because it steals this Z TriFold feature</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tried using the Galaxy Z Fold 8’s MyFanCam on my dogs, but I hit a major wall ]]></title>
                                                                                                                                                                                                <link>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</link>
                                                                            <description>
                            <![CDATA[ I had hoped MyFanCam could work its magic on videos of my hyperactive dogs, but it only works on people. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Z7nQeoCiM8EK3DKokiKDEZ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/f36THwqTLhj3VY5eNSgLyW-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 26 Jul 2026 07:15: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.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/f36THwqTLhj3VY5eNSgLyW-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8 shown in hand]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8 shown in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8 shown in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/f36THwqTLhj3VY5eNSgLyW-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Samsung Galaxy Z 8</a> series seems mostly focused on hardware upgrades, but there are still some excellent new AI and software features for you to take advantage of. My current favorite is MyFanCam, which edits a video to follow an individual rather than including the entire frame. Unfortunately, having tested the feature, there's one downside I didn't anticipate.</p><p>I have two very energetic dogs, and I had hoped MyFanCam would help make videos of them playing a little easier to follow. Unfortunately the AI is only capable of recognizing people, which means my dreams of more stable and easy to follow videos of my dog chasing a ball have been dashed — for now.</p><div class="product"><a data-dimension112="827571f4-87a4-11f1-b7eb-3d8306df317c" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension25="$0" href="https://www.samsung.com/us/smartphones/galaxy-z-flip8/buy/galaxy-z-flip8-256gb-unlocked-sku-sm-f776uliaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="airedale-K3AQ3stDNey4NiS8bxtM7X-0" name="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YFnsbuxZypxrkdepxUH3h9.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Flip 8: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-flip8/buy/galaxy-z-flip8-256gb-unlocked-sku-sm-f776uliaxaa/" target="_blank" rel="nofollow" data-dimension112="827571f4-87a4-11f1-b7eb-3d8306df317c" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension25="$0"><strong>up to $600 off w/ trade-in @ Samsung</strong></a><br>Samsung is knocking up to $600 off its Galaxy Z Flip 8 preorder when you trade-in an older phone. Or you can get a $150 Samsung credit with no trade-in. <br><br><strong>Also check out these coupons: </strong><br>🎟️ <a href="https://www.techradar.com/outlink?subtag=hawk-custom-tracking&countryCode=US&siteCode=techradar&secCode=b022b312c3d79d3c8edc4b4925be465f624ac4ca00de31384a58b09177cc573b&redirect=https%3A%2F%2Fc.next2.io%3Fsid%3D11175266%26said%3Dtechradar.com%26partnerId%3Dhawk-custom-tracking%26link%3Dhttps%253A%252F%252Fwww.samsung.com%252Fus%252Fbusiness%252F%26merchantId%3D214378%26fallback_url%3Dhttps%253A%252F%252Fclick.linksynergy.com%252Fdeeplink%253Fid%253DizUPF8VmRng%2526mid%253D47773%2526u1%253Dhawk-custom-tracking%2526murl%253Dhttps%25253A%25252F%25252Fwww.samsung.com%25252Fus%25252Fbusiness%25252F&type=product&id=484787-2980b2d8ea6df6e4862885a89caed91f32c72d772580cb1185c2befed5887890&productType=vouchers" target="_blank" rel="nofollow"><strong>Claim up to 15% off selected items using this Samsung discount code</strong></a><br>🎟️ <a href="https://www.techradar.com/outlink?subtag=hawk-custom-tracking&countryCode=US&siteCode=techradar&secCode=b022b312c3d79d3c8edc4b4925be465f624ac4ca00de31384a58b09177cc573b&redirect=https%3A%2F%2Fc.next2.io%3Fsid%3D11175266%26said%3Dtechradar.com%26partnerId%3Dhawk-custom-tracking%26link%3Dhttps%253A%252F%252Fwww.samsung.com%252Fus%26merchantId%3D214378%26fallback_url%3Dhttps%253A%252F%252Fclick.linksynergy.com%252Fdeeplink%253Fid%253DizUPF8VmRng%2526mid%253D47773%2526u1%253Dhawk-custom-tracking%2526murl%253Dhttps%25253A%25252F%25252Fwww.samsung.com%25252Fus&type=product&id=484787-MmU2NTQwZWZlNzE4&productType=vouchers" target="_blank" rel="nofollow"><strong>Use this Samsung coupon code to get 10% off selected items</strong></a><br>🎟️ <a href="https://www.techradar.com/outlink?subtag=hawk-custom-tracking&countryCode=US&siteCode=techradar&secCode=b022b312c3d79d3c8edc4b4925be465f624ac4ca00de31384a58b09177cc573b&redirect=https%3A%2F%2Fc.next2.io%3Fsid%3D11175266%26said%3Dtechradar.com%26partnerId%3Dhawk-custom-tracking%26link%3Dhttps%253A%252F%252Fwww.samsung.com%252Fus%26merchantId%3D214378%26fallback_url%3Dhttps%253A%252F%252Fclick.linksynergy.com%252Fdeeplink%253Fid%253DizUPF8VmRng%2526mid%253D47773%2526u1%253Dhawk-custom-tracking%2526murl%253Dhttps%25253A%25252F%25252Fwww.samsung.com%25252Fus&type=product&id=503204-1408379270&productType=vouchers" target="_blank" rel="nofollow"><strong>Get 10% off orders using this Samsung discount code</strong></a><a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-flip8/buy/galaxy-z-flip8-256gb-unlocked-sku-sm-f776uliaxaa/" target="_blank" rel="nofollow" data-dimension112="827571f4-87a4-11f1-b7eb-3d8306df317c" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension25="$0">View Deal</a></p></div><div class="product"><a data-dimension112="82757276-87a4-11f1-8375-5bca0f20cf5b" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="$0" 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:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="airedale-QJ4rKzJiVJEYbAeupkwY9m-1" name="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YFnsbuxZypxrkdepxUH3h9.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorder: </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="82757276-87a4-11f1-8375-5bca0f20cf5b" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="$0"><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 preorders when you trade-in an older phone. Alternatively, you'll get a $200 credit if you don't have a trade-in.<br><br><strong>Also check out these coupons: </strong><br>🎟️ <a href="https://www.techradar.com/outlink?subtag=hawk-custom-tracking&countryCode=US&siteCode=techradar&secCode=b022b312c3d79d3c8edc4b4925be465f624ac4ca00de31384a58b09177cc573b&redirect=https%3A%2F%2Fc.next2.io%3Fsid%3D11175266%26said%3Dtechradar.com%26partnerId%3Dhawk-custom-tracking%26link%3Dhttps%253A%252F%252Fwww.samsung.com%252Fus%252Fbusiness%252F%26merchantId%3D214378%26fallback_url%3Dhttps%253A%252F%252Fclick.linksynergy.com%252Fdeeplink%253Fid%253DizUPF8VmRng%2526mid%253D47773%2526u1%253Dhawk-custom-tracking%2526murl%253Dhttps%25253A%25252F%25252Fwww.samsung.com%25252Fus%25252Fbusiness%25252F&type=product&id=484787-2980b2d8ea6df6e4862885a89caed91f32c72d772580cb1185c2befed5887890&productType=vouchers" target="_blank" rel="nofollow"><strong>Claim up to 15% off selected items using this Samsung discount code</strong></a><br>🎟️ <a href="https://www.techradar.com/outlink?subtag=hawk-custom-tracking&countryCode=US&siteCode=techradar&secCode=b022b312c3d79d3c8edc4b4925be465f624ac4ca00de31384a58b09177cc573b&redirect=https%3A%2F%2Fc.next2.io%3Fsid%3D11175266%26said%3Dtechradar.com%26partnerId%3Dhawk-custom-tracking%26link%3Dhttps%253A%252F%252Fwww.samsung.com%252Fus%26merchantId%3D214378%26fallback_url%3Dhttps%253A%252F%252Fclick.linksynergy.com%252Fdeeplink%253Fid%253DizUPF8VmRng%2526mid%253D47773%2526u1%253Dhawk-custom-tracking%2526murl%253Dhttps%25253A%25252F%25252Fwww.samsung.com%25252Fus&type=product&id=484787-MmU2NTQwZWZlNzE4&productType=vouchers" target="_blank" rel="nofollow"><strong>Use this Samsung coupon code to get 10% off selected items</strong></a><br>🎟️ <a href="https://www.techradar.com/outlink?subtag=hawk-custom-tracking&countryCode=US&siteCode=techradar&secCode=b022b312c3d79d3c8edc4b4925be465f624ac4ca00de31384a58b09177cc573b&redirect=https%3A%2F%2Fc.next2.io%3Fsid%3D11175266%26said%3Dtechradar.com%26partnerId%3Dhawk-custom-tracking%26link%3Dhttps%253A%252F%252Fwww.samsung.com%252Fus%26merchantId%3D214378%26fallback_url%3Dhttps%253A%252F%252Fclick.linksynergy.com%252Fdeeplink%253Fid%253DizUPF8VmRng%2526mid%253D47773%2526u1%253Dhawk-custom-tracking%2526murl%253Dhttps%25253A%25252F%25252Fwww.samsung.com%25252Fus&type=product&id=503204-1408379270&productType=vouchers" target="_blank" rel="nofollow"><strong>Get 10% off orders using this Samsung discount code</strong></a><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="82757276-87a4-11f1-8375-5bca0f20cf5b" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="$0">View Deal</a></p></div><h2 id="what-is-myfancam">What is MyFanCam?</h2><p>MyFanCam is a new Galaxy AI feature that's been released on the Galaxy Z Fold 8 Ultra, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-everything-you-need-to-know-about-the-new-wider-foldable">Z Fold 8</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review">Z Flip 8</a>. The idea behind it is that you can reframe existing videos and shift the focus onto individual subjects rather than everything as a whole. Samsung's example videos feature people dancing together and utilizing MyFanCam to focus on a single member of the troupe. </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/N2AtiagWdxA" allowfullscreen></iframe></div></div><p>This isn't a dedicated camera mode that follows people in frame, though. That feature has existed for a few years, and it's called Video Auto Framing. Instead, this is an AI editing feature, which takes videos you've already recorded and applies the principles of MyFanCam to the people in shot. </p><p>I was able to do it with videos I recorded as far back as 2019 on a non-Samsung phone. That's helpful, because it means you could breathe new life into your old videos, without having to worry about whether they have the right markers for Galaxy AI to do what needs to be done.</p><p>The other obvious benefit here is that you don't need to worry about getting the perfect shot while you're busy recording. In the same way that <a href="https://www.tomsguide.com/phones/iphones/i-just-installed-the-ios-27-beta-and-reframe-is-unlike-any-other-ai-feature-ive-come-across">Reframe in iOS 27</a> will let you tweak the perspective of your photos, MyFanCam lets you change the main focus of the video so that viewers can hone in on what's important.</p><p>It's also worth noting that MyFanCam can't focus on more than one subject at a time, because that defeats the whole purpose of the feature. However you can always go back and make another MyFanCam video that focuses on someone else. </p><p>So in that group of three dancers, you could potentially end up with three additional takes on the very same video.</p><h2 id="it-only-seems-to-work-on-people-right-now">It only seems to work on people 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:1723px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="trjgZiS9afkr2BxJb2oaZL" name="Screenshot_20260724_171511_Studio" alt="samsung galaxy z fold 8 myfancam testing" src="https://cdn.mos.cms.futurecdn.net/v2/t:381,l:299,cw:1723,ch:1723,q:80/trjgZiS9afkr2BxJb2oaZL.jpg" mos="" align="middle" fullscreen="" width="2504" height="2256" attribution="" endorsement="" 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 like taking photos and shooting videos of my dogs. They're adorable for one, but you never know when they're going to do something stupid and hilarious. The problem is keeping track of them when they're off their leash, and bolting around the local park. They're moving so quickly, and are often so far away, that I just can't keep track of them with my camera.</p><p>Sadly, running videos of my dogs playing through MyFanCam did... nothing. The AI didn't register that the dogs were there, which obviously meant that it wasn't able to focus on one of them and edit the video accordingly. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1729px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ErCuynTe3khLM7kcAJJiRK" name="Screenshot_20260724_171351_Studio" alt="samsung galaxy z fold 8 myfancam testing" src="https://cdn.mos.cms.futurecdn.net/v2/t:381,l:321,cw:1729,ch:1729,q:80/ErCuynTe3khLM7kcAJJiRK.jpg" mos="" align="middle" fullscreen="" width="2504" height="2256" attribution="" endorsement="" 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 then went back and checked it against a video of me and one of my dogs clearly in frame, just to see what happened. As expected, it picked me up right away, but was apparently oblivious to my furry companion. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1873px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="MKjqWSQsnayNcMHYG9dB8K" name="Screenshot_20260724_171324_Studio" alt="samsung galaxy z fold 8 myfancam testing" src="https://cdn.mos.cms.futurecdn.net/v2/t:242,l:631,cw:1873,ch:1873,q:80/MKjqWSQsnayNcMHYG9dB8K.jpg" mos="" align="middle" fullscreen="" width="2504" height="2256" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Oddly intrigued, I tried to find some bizarre videos of people, and see how well Galaxy AI was able to pick up people in situations that are a little out of the ordinary. It had no problem focusing on a Berlin street performer that was doing a handstand on a skateboard, but it had trouble recognizing that a mid-performance routine was a human being. Similarly, adolescent gorillas at the zoo straight-up didn't register.</p><p>If you want to know something quite funny, MyFanCam was able to focus on certain characters on the parade floats at Disney World, including Pluto and Chip — but it struggled with Goofy. Clearly not even AI is sure what Goofy is supposed to be, because he's sure as heck not a dog.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1711px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="QqHaq5XK2MHEFu3AmMVxXK" name="Screenshot_20260724_171418_Studio" alt="samsung galaxy z fold 8 myfancam testing" src="https://cdn.mos.cms.futurecdn.net/v2/t:417,l:321,cw:1711,ch:1711,q:80/QqHaq5XK2MHEFu3AmMVxXK.jpg" mos="" align="middle" fullscreen="" width="2504" height="2256" attribution="" endorsement="" 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't tell you whether Samsung has done this deliberately or not, but in my experience attempting to use AI camera features, I've noticed that it only really plays along when people are involved. <a href="https://www.tomsguide.com/phones/google-pixel-phones/how-to-use-google-pixel-9-add-me-tool">Google's Add me</a> feature is a very good example of this, since it also wouldn't register that my dogs were living, moving creatures that could move in and out of photos as they saw fit.</p><p>As for why, I can only assume that it's because the AI utilized by these camera features has only been trained on people. Tech companies likely figured that people would mostly want to photograph or video their friends and family. </p><p>Try and get the AI to register something slightly out of the usual parameters and it'll struggle. I guess people are easier for AI models to understand, whereas animals and pets come in all kinds of different shapes and sizes.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORMNzW"></div>                            </div>                            <script src="https://kwizly.com/embed/ORMNzW.js" async></script><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:2772px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="sG4D9mpBszMGgWBxFvE29W" name="Galaxy Z Fold 8-38" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/sG4D9mpBszMGgWBxFvE29W.jpg" mos="" align="middle" fullscreen="" width="2772" height="1559" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Despite that obvious flaw, I feel as though MyFanCam has potential. The idea that you can go back to a video and completely reshape what people see, and without resorting to changing things with generative AI, is quite impressive. </p><p>I'm disappointed by the lack of support for pets, though. As anyone with energetic animals in their lives can likely attest, capturing them on camera can be rather difficult. I was so looking forward to getting MyFanCam to get to work on the videos of my dogs, but sadly that wasn't meant to be. Hopefully it's something Samsung can work on, and roll out to Galaxy phones and roll out as a software update in the near future.</p><p>In the meantime, just make sure to keep your editing focused on people.</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-ditched-my-iphone-for-the-z-fold-8-android-17s-new-migration-tool-is-pure-magic-but-there-is-one-painful-catch">I just ditched my iPhone for the Z Fold 8 — Android 17’s new migration tool is pure magic, but there is one painful catch</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt">I just spent 24 hours with the Galaxy Z fold 8 Ultra — here's what I liked and what I didn't</a></li><li><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">Galaxy Z Fold 8 Ultra doesn't have a crease-free display — but it's the closest Samsung has ever got to one</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iOS 27 finally fixes the most annoying iPhone workaround we all use ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use</link>
                                                                            <description>
                            <![CDATA[ No more awkward screenshots: iOS 27 brings full-res frame extraction to iPhone — here’s how to do it. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">XzEetEwQuDJoqEw8PgFwV8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/YPmtfhWqnuiZkoGGSBRzNG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 26 Jul 2026 04:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/YPmtfhWqnuiZkoGGSBRzNG-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iOS 27 logo on iPhone]]></media:description>                                                            <media:text><![CDATA[iOS 27 logo on iPhone]]></media:text>
                                <media:title type="plain"><![CDATA[iOS 27 logo on iPhone]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/YPmtfhWqnuiZkoGGSBRzNG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple Photos now lets you extract full-resolution image stills directly from any video. Say goodbye to low-quality, cropped screenshots on <a href="https://www.tomsguide.com/phones/iphones/ios-27s-new-ai-feature-will-automatically-fix-your-weak-passwords-how-to-set-it-up">iOS 27</a>.</p><p>For years, pulling a freeze-frame photograph out of a video clip on your iPhone meant settling for a clunky workaround: pausing the clip at just the right second, hiding the playback controls, and taking a screenshot.</p><p>It worked, but the results were always second-rate. You ended up with a lower-resolution image, awkward black bars, and a cropped aspect ratio that required extra editing.</p><p>Thankfully, Apple is finally fixing this long-standing oversight. iOS 27 introduces a save-frame-as-photo feature inside the Photos app, and it is a game-changer for capturing. </p><h2 id="how-it-works">How it works</h2><p>Instead of fighting with your screen bounds and timing the UI overlay, extracting a clean photo from any saved video now takes just a couple of taps.</p><p>While watching a video, <strong>simply pause on the exact frame you want to keep</strong>. From there, <strong>tap the three-dot menu icon</strong> in the top-right corner of the screen and <strong>select the option to save that frame as a photo</strong>.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4KXKCcF5Qx85JQUkW8yeUm" name="iOS 27 Save Video Frame as Photo feature on iPhone" alt="iOS 27 Save Video Frame as Photo feature on iPhone" src="https://cdn.mos.cms.futurecdn.net/4KXKCcF5Qx85JQUkW8yeUm.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: Tom's Guide)</span></figcaption></figure><p>Your iPhone takes that exact millisecond and instantly saves it as a crisp, standalone photo right in your main library. Since it pulls straight from the original video file instead of taking a digital snap of your screen, you get the highest quality possible.</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/the-3-new-ios-27-ai-tools-that-will-instantly-save-your-ruined-photos">The 3 new iOS 27 AI tools that will instantly save your ruined photos</a></li><li><a href="https://www.tomsguide.com/phones/iphones/the-new-siri-app-in-ios-27-is-keeping-receipts-on-everything-you-ask-heres-how-to-auto-delete-your-chats">The new Siri app in iOS 27 is keeping receipts on everything you ask — here’s how to auto-delete your chats</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27s-new-ai-feature-will-automatically-fix-your-weak-passwords-how-to-set-it-up">iOS 27's new AI feature will automatically fix your weak passwords — how to set it up</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The one Google Maps tip everyone should know — how to blur your home in Street View ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/how-to-stop-google-maps-from-displaying-your-home-to-strangers</link>
                                                                            <description>
                            <![CDATA[ Learn how to hide your home on Google Maps and keep strangers from peeking at your property. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">qQUwpKes8BNz2qis5rARRi</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Q82gTVfSngY342JtDgZANC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 25 Jul 2026 08:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Q82gTVfSngY342JtDgZANC-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Maps logo on phone with map in background]]></media:description>                                                            <media:text><![CDATA[Google Maps logo on phone with map in background]]></media:text>
                                <media:title type="plain"><![CDATA[Google Maps logo on phone with map in background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Q82gTVfSngY342JtDgZANC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Type your address into Google Maps, switch to Street View, and there it is: a high-resolution photo of your front door, windows, and property line.</p><p>While it’s a convenient tool for navigating, it also means your home's exterior features are visible to anyone online. If you'd prefer to keep those details private, Google provides a straightforward, free way to handle it. </p><p>You can request to permanently blur your home from Street View, removing it from public view entirely. Here is how to get it done.</p><h2 id="how-to-hide-your-home-on-google-maps">How to hide your home on Google Maps</h2><p>You're best off using a desktop browser for this, as the blurring feature doesn't work as well on mobile. <strong>Go to </strong><a href="https://www.google.com/maps"><strong>maps.google.com</strong></a><strong> and search your home address</strong>. When your location appears, <strong>click the photo of your home displayed above your address</strong>. This opens Street View.</p><p>Once in Street View,<strong> look at the bottom-right corner for "Report a Problem" and click it</strong>. You'll see a red and black box overlaid on the image. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="AJSXyAJfXawn5y7EBwmtXR" name="Report a problem on Google Maps" alt="Report a problem on Google Maps" src="https://cdn.mos.cms.futurecdn.net/AJSXyAJfXawn5y7EBwmtXR.jpg" mos="" align="middle" fullscreen="" width="1510" height="900" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>You'll see a red and black box overlaid on the image. <strong>Use your mouse to position this box</strong> so your home and anything else you want blurred is completely contained within it. The plus button zooms in, the minus button zooms out. Adjust until you've framed exactly what you want hidden.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="Wf2JYz3LfvZFKDB3NdMdbh" name="Requesting your home be removed from Google Maps" alt="Requesting your home be removed from Google Maps" src="https://cdn.mos.cms.futurecdn.net/Wf2JYz3LfvZFKDB3NdMdbh.jpg" mos="" align="middle" fullscreen="" width="1510" height="900" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Below the image, <strong>choose what you're requesting to blur:</strong> A face, Your home, car/license plate, or A different object.<strong> </strong></p><p><strong>Select "Your home</strong>.<strong>" </strong>Google will ask for additional details, so be specific and thorough so they understand exactly what needs blurring. </p><p><strong>Provide your email address, complete the captcha if prompted, and click Submit</strong>.</p><p>Google will email you confirming they received the request. They may ask follow-up questions via email. There's no official timeline for approval, but most requests process within weeks. Once approved, the blur is permanent.</p><h2 id="what-you-need-to-know-before-requesting">What you need to know before requesting</h2><p>Google cautions that once something is blurred, it stays blurred permanently. You can't undo it. Make absolutely sure you've selected exactly what you want hidden before submitting. </p><p>If your request is denied, you can't resubmit the same image immediately. If approved, your home disappears from Street View everywhere, including past and future images.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OzrbaO"></div>                            </div>                            <script src="https://kwizly.com/embed/OzrbaO.js" async></script><p>Where do you stand? 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/computing/why-google-maps-keeps-sending-you-the-long-way-and-how-to-stop-it">Google Maps actually defaults to the slowest route now — here's how to fix it</a></li><li><a href="https://www.tomsguide.com/phones/my-favorite-google-maps-feature-is-the-one-that-lets-me-visit-a-world-that-doesnt-exist-anymore">I tried Google Maps hidden time machine feature — here's how to do it yourself</a></li><li><a href="https://www.tomsguide.com/phones/how-to-fix-the-maddening-google-maps-issue-where-preview-replaces-the-start-button">Google Maps only showing preview? Here’s how to get the start button back</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Fold 8, Fold 8 Ultra, and Flip 8 battery life tested — silicon carbon pays off ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off</link>
                                                                            <description>
                            <![CDATA[ Armed with silicon-carbon batteries, Samsung’s new foldables deliver massive generational battery gains led by the Z Fold 8 Ultra. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Znp6ZXPf4UfqPWZWfDpivF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Lrz7DaxqAmqjxTXCRxXmTQ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 25 Jul 2026 04: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.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/Lrz7DaxqAmqjxTXCRxXmTQ-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Samsung Galaxy Z 8 lineup in hand]]></media:description>                                                            <media:text><![CDATA[The Samsung Galaxy Z 8 lineup in hand]]></media:text>
                                <media:title type="plain"><![CDATA[The Samsung Galaxy Z 8 lineup in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Lrz7DaxqAmqjxTXCRxXmTQ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As much as I rave about the extra utility that the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> have over traditional slabs, there’s one unspoken compromise they make: subpar battery life. Even though I personally don't mind topping off at some point during the workday, doing so can be a deal breaker for anyone who craves all-day endurance.</p><p>With the launch of Samsung’s new foldables, they certainly have a lot to prove — more so when they’re also some of the thinnest and lightest models to date. The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review">Galaxy Z Flip 8</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Z Fold 8</a>, and <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Z Fold 8 Ultra</a> are notable as the first Samsung devices to adopt silicon-carbon batteries, which pack more capacity without adding extra bulk.</p><p>Paired with the power-efficient <a href="https://www.tomsguide.com/phones/android-phones/qualcomms-snapdragon-8-elite-gen-5-promises-big-performance-and-ai-upgrades-and-we-could-see-them-in-the-galaxy-s26-ultra">Snapdragon 8 Elite Gen 5 </a>silicon, they’re bound to be some of the longest-lasting foldables to pass through the Tom’s Guide labs. After putting them through a barrage of battery drain tests, I can tell you they don’t disappoint.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-life-results"><span>Galaxy Z Fold 8 vs Fold 8 Ultra vs Flip 8: Battery life results</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery Capacity (mAh)</strong></p></td><td  ><p><strong>Battery Life (hrs:mins)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 8</strong></p></td><td  ><p>4,300 mAh</p></td><td  ><p>12:50</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 7</strong></p></td><td  ><p>4,300 mAh</p></td><td  ><p>12:24</p></td></tr><tr><td class="firstcol " ><p><strong>Razr Ultra (2026)</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>16:20</p></td></tr></tbody></table></div><p>Interestingly, the Z Flip 8’s battery life performance doesn’t seem as dramatic as the other phones — especially considering it packs the same 4,300 mAh capacity as before. What’s different this time is how Samsung engineered the phone to be thinner and lighter than its predecessor without compromising on battery capacity.</p><p>The new flip-style phone clocks in at 12 hours and 50 minutes, representing a 3.5% increase over the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-hands-on-review-feels-like-flip-phone-perfection">Flip 7’s</a> 12:24 runtime. Against its biggest rival, the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-ultra-2026-review">Razr Ultra (2026)</a>, Motorola still holds the title of the longest-lasting flip phone with a time of 16 hours and 20 minutes. That’s a huge gap, primarily aided by Motorola's massive 5,000 mAh battery.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery Capacity (mAh)</strong></p></td><td  ><p><strong>Battery Life (hrs:mins)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>4,800 mAh</p></td><td  ><p>12:20</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>14:09</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>4,400 mAh</p></td><td  ><p>10:44</p></td></tr><tr><td class="firstcol " ><p><strong>Razr Fold</strong></p></td><td  ><p>6,000 mAh</p></td><td  ><p>14:44</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro Fold</strong></p></td><td  ><p>5,015 mAh</p></td><td  ><p>12:16</p></td></tr></tbody></table></div><p>Despite this, where Samsung truly makes a massive leap is in its flagship book-style foldables. The premier Galaxy Z Fold 8 Ultra logs an extraordinary 14 hours and 9 minutes, blowing past the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Z Fold 7’s</a> 10 hours and 44 minutes. That’s an<strong> impressive 31.8% increase in endurance</strong>. Likewise, the Galaxy Z Fold 8 also sees a substantial gain at 12 hours and 20 minutes — a 14.8% improvement compared to last year's Fold 7.</p><p>Against its key rivals, the Z Fold 8 Ultra proves it can hold its ground with the best in the business. Clocking in at 14 hours and 9 minutes, Samsung's premium foldable comfortably outperforms the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Google Pixel 10 Pro Fold</a> by a margin of 15.3%.</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-charging-speeds"><span>Galaxy Z Fold 8 vs Fold 8 Ultra vs Flip 8: Charging speeds</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Charging Speed (in 15 minutes)</strong></p></td><td  ><p><strong>Charging Speed (in 30 minutes)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>43%</p></td><td  ><p>70%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>49%</p></td><td  ><p>76%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>28%</p></td><td  ><p>54%</p></td></tr><tr><td class="firstcol " ><p><strong>Razr Fold</strong></p></td><td  ><p>41%</p></td><td  ><p>73%</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 10 Pro Fold</strong></p></td><td  ><p>28%</p></td><td  ><p>58%</p></td></tr></tbody></table></div><p>Charging is another area where Samsung’s new phones make noticeable gains — specifically with a bump to 45W wired charging across all three models. That’s a welcome increase from the previous 25W cap, allowing them to juice up much faster in the same timeframe.</p><p>The Galaxy Z Fold 8 Ultra leads the pack, <strong>hitting 49% in 15 minutes and 76% in 30 minutes</strong>. That’s an impressive leap over the Z Fold 7’s 54% mark, even outstripping the Motorola Razr Fold’s 73%. The standard Z Fold 8 also impresses by reaching 70% in half an hour.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Charging Speed (in 15 minutes)</strong></p></td><td  ><p><strong>Charging Speed (in 30 minutes)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 8</strong></p></td><td  ><p>35%</p></td><td  ><p>59%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 7</strong></p></td><td  ><p>29%</p></td><td  ><p>55%</p></td></tr><tr><td class="firstcol " ><p><strong>Razr Ultra (2026)</strong></p></td><td  ><p>42%</p></td><td  ><p>74%</p></td></tr></tbody></table></div><p>Meanwhile, the Z Flip 8 offers a slighter improvement over its predecessor, reaching 59% in 30 minutes compared to the Flip 7’s 55% — a surprisingly modest gain given the wattage upgrade. While that still trails the Motorola Razr Ultra’s blazing 74% charge result, Samsung’s entire 2026 lineup comfortably outpaces rivals like the Google Pixel 10 Pro Fold (58%), ensuring less time tethered to a wall adapter.</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-verdict"><span>Galaxy Z Fold 8 vs Fold 8 Ultra vs Flip 8: 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:4318px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PEQ4Xb5Gy5qwqg5NJJmYv" name="Samsung Galaxy Z 8 lineup" alt="Samsung Galaxy Z 8 lineup." src="https://cdn.mos.cms.futurecdn.net/PEQ4Xb5Gy5qwqg5NJJmYv.jpg" mos="" align="middle" fullscreen="" width="4318" height="2429" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If you weren’t convinced already, I’ll state it again: silicon-carbon batteries are making a massive impact — and Samsung’s new foldables cement my sentiment. Foldable phones have come a long way, and battery performance is no longer one of their compromises.</p><p>By introducing silicon-carbon battery technology alongside 45W wired charging, Samsung’s 2026 Galaxy Z lineup delivers meaningful upgrades where it matters most and makes them solid <a href="https://www.tomsguide.com/us/smartphones-best-battery-life,review-2857.html">best phone battery life </a>contenders. These improvements should translate to tangible real-world gains, powering you through a full workday without the constant need to top off.</p><p>While Motorola continues to push the upper boundaries of battery life with its Razr series, Samsung’s Galaxy Z Fold 8 Ultra stands out as the ultimate powerhouse, comfortably outlasting rivals like the Pixel 10 Pro Fold while charging faster than ever before. Whether you prefer a compact flip or an immersive book-style screen, you can finally enjoy foldable productivity without constantly watching your battery level.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e47Y4X"></div>                            </div>                            <script src="https://kwizly.com/embed/e47Y4X.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/i-just-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt">I just spent 24 hours with the Galaxy Z fold 8 Ultra — here's what I liked and what I didn't</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview">‘We're pretty confident': How Samsung plans to fight the first foldable iPhone</a></li><li><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">I just ditched my iPhone for the Z Fold 8 — Android 17’s new migration tool is pure magic, but there is one painful catch</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Galaxy Z Fold 8 vs Fold 8 Ultra vs Flip 8 benchmarked — the results are in ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-benchmarked-the-results-are-in</link>
                                                                            <description>
                            <![CDATA[ We benchmark Samsung’s new Galaxy Z Fold 8 Ultra, Z Fold 8, and Z Flip 8 to see how the Snapdragon 8 Elite Gen 5 performs against the competition. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">UDpKo9PbwXUMeioND3wrZT</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/8V5LZu98LotXf8VAQDiLu-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 24 Jul 2026 20:00:38 +0000</pubDate>                                                                                                                                <updated>Fri, 24 Jul 2026 21:27:52 +0000</updated>
                                                                                                                                            <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.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/8V5LZu98LotXf8VAQDiLu-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z 8 lineup.]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z 8 lineup.]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z 8 lineup.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/8V5LZu98LotXf8VAQDiLu-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung’s new foldables were announced at <a href="https://www.tomsguide.com/news/live/samsung-galaxy-unpacked-2026-live">Galaxy Unpacked</a>, and despite their vastly different form factors, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review">Galaxy Z Flip 8</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Z Fold 8</a>, and <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Z Fold 8 Ultra</a> all share one crucial component: Qualcomm’s <a href="https://www.tomsguide.com/phones/android-phones/qualcomms-snapdragon-8-elite-gen-5-promises-big-performance-and-ai-upgrades-and-we-could-see-them-in-the-galaxy-s26-ultra">Snapdragon 8 Elite Gen 5 chip</a>.</p><p>That’s a big deal. Last year, Samsung opted for its in-house <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-launches-exynos-2500-just-ahead-of-unpacked-chip-rumored-to-power-galaxy-z-flip-7">Exynos 2500</a> chipset on 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> while saving Qualcomm’s flagship silicon for the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Z Fold 7</a>. This year’s rollout puts all three foldable contenders on even ground — and after putting them through a full suite of benchmark tests, I can tell you they’re easily the most powerful foldables to ever pass through the Tom’s Guide labs.</p><p>However, subtle performance variations between the three reveal which device actually reigns supreme. Here’s how the numbers break down.</p><div class="product"><a data-dimension112="86c3022e-87a6-11f1-a99c-29cf8f4aba64" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: 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:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="Z8JQhsbfoEz3hniEDEyqBV" name="Samsung Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Z8JQhsbfoEz3hniEDEyqBV.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorder: </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="86c3022e-87a6-11f1-a99c-29cf8f4aba64" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: 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 preorders 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="86c3022e-87a6-11f1-a99c-29cf8f4aba64" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="86c302a6-87a6-11f1-b943-c9f803c3f9d4" data-action="Deal Block" data-label="If you want the premier foldable, the Galaxy Z Fold 8 Ultra packs a larger 8-inch main display, a more robust triple camera, and a large 5,000 mAh battery capacity. For a limited time, Amazon is offering a free $350 Amazon gift card when you preorder your Galaxy Z Fold 8 Ultra." data-dimension48="If you want the premier foldable, the Galaxy Z Fold 8 Ultra packs a larger 8-inch main display, a more robust triple camera, and a large 5,000 mAh battery capacity. For a limited time, Amazon is offering a free $350 Amazon gift card when you preorder your Galaxy Z Fold 8 Ultra." data-dimension25="$2099.99" 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: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.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you want the premier foldable, the Galaxy Z Fold 8 Ultra packs a larger 8-inch main display, a more robust triple camera, and a large 5,000 mAh battery capacity. For a limited time, Amazon is offering a free $350 Amazon gift card when you preorder your Galaxy Z Fold 8 Ultra.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J/" target="_blank" rel="nofollow" data-dimension112="86c302a6-87a6-11f1-b943-c9f803c3f9d4" data-action="Deal Block" data-label="If you want the premier foldable, the Galaxy Z Fold 8 Ultra packs a larger 8-inch main display, a more robust triple camera, and a large 5,000 mAh battery capacity. For a limited time, Amazon is offering a free $350 Amazon gift card when you preorder your Galaxy Z Fold 8 Ultra." data-dimension48="If you want the premier foldable, the Galaxy Z Fold 8 Ultra packs a larger 8-inch main display, a more robust triple camera, and a large 5,000 mAh battery capacity. For a limited time, Amazon is offering a free $350 Amazon gift card when you preorder your Galaxy Z Fold 8 Ultra." data-dimension25="$2099.99">View Deal</a></p></div><div class="product"><a data-dimension112="86c3030a-87a6-11f1-ba9e-fda16b9a064b" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ Best Buy" data-dimension48="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ 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:1199px;"><p class="vanilla-image-block" style="padding-top:125.10%;"><img id="rTkAPNzBbP77RUVHtMufoZ" name="Galaxy Z Flip 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rTkAPNzBbP77RUVHtMufoZ.jpg" mos="" align="middle" fullscreen="" width="1199" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Flip 8: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="86c3030a-87a6-11f1-ba9e-fda16b9a064b" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ Best Buy" data-dimension48="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ Best Buy" data-dimension25=""><strong>up to $1,200 off w/ trade-in + $200 gift card @ Best Buy</strong></a><br>Best Buy is offering one of the best Galaxy Z Flip 8 deals right now. This flip style phone might look the same, but it's actually thinner and lighter. Plus, it's packing some new features, like Horizon Lock when you shoot videos. Purchase your phone at Best Buy and you'll get up to $1,200 off via trade-in and 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="86c3030a-87a6-11f1-ba9e-fda16b9a064b" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ Best Buy" data-dimension48="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ Best Buy" data-dimension25="">View Deal</a></p></div><h2 class="article-body__section" id="section-galaxy-z-flip-8-vs-fold-8-vs-fold-8-ultra-geekbench"><span>Galaxy Z Flip 8 vs Fold 8 vs Fold 8 Ultra: GeekBench</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>GeekBench 6 (single / multi-core)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 8</strong></p></td><td  ><p>3,627 / 11,215</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 7</strong></p></td><td  ><p>2,286 / 8,079</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>3,659 / 11,020</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></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>3,052 / 9,735</p></td></tr></tbody></table></div><p>When it comes to raw processing power, the Z Fold 8 Ultra leads the pack, breaking the 3,700 barrier in Geekbench 6.7 with an average single-core score of 3,733 and a multi-core score of 11,457.</p><p>A surprising trend emerges between the other two foldables. While the standard Galaxy Z Fold 8 posts a slightly higher single-core score (3,659), the compact Z Flip 8 actually outperforms it in multi-core performance, hitting 11,215 compared to the Fold 8’s 11,020.</p><div><blockquote><p>What’s really notable here is how the Z Flip 8 yields a massive 59% jump in single-core performance</p></blockquote></div><p>What’s really notable here is how the <strong>Z Flip 8 yields a massive 59% jump in single-core performance</strong> and an equally compelling 39% increase in multi-core power — starkly highlighting the gap between Samsung's previous Exynos silicon and the Snapdragon 8 Elite Gen 5.</p><p>While the generational leap isn’t quite as dramatic for the Z Fold 8 Ultra, it remains a marked improvement. Samsung's <strong>top-tier foldable still delivers a solid 22.3% boost in single-core power</strong> and a 17.7% bump in multi-core performance over the Fold 7.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>GeekBench 6 (single / multi-core)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Ultra (2026)</strong></p></td><td  ><p>2,886 / 8,982</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>2,711 / 9,134</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro Fold</strong></p></td><td  ><p>2,344 / 6,332</p></td></tr></tbody></table></div><p>Against their biggest rivals, Samsung’s new foldables still come out on top hands down. The Z Flip 8 comfortably outperforms the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-ultra-2026-review">Razr Ultra (2026)</a> in Geekbench 6, boasting a superb 25.7% advantage in single-core speeds and a 24.9% lead in multi-core performance.</p><p>Meanwhile, the Z Fold 8 Ultra delivers 37.7% faster single-core and 25.4% higher multi-core output compared to the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Razr Fold</a>. The contrast is even starker against the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Google Pixel 10 Pro Fold</a>, where Samsung’s flagship foldable completely blows past Google’s offering with a 59.3% higher single-core score and an astonishing 80.9% lead in multi-core performance.</p><h2 class="article-body__section" id="section-galaxy-z-flip-8-vs-fold-8-vs-fold-8-ultra-3dmark"><span>Galaxy Z Flip 8 vs Fold 8 vs Fold 8 Ultra: 3DMark</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Wild Life Unlimited (score / FPS)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 8</strong></p></td><td  ><p>29,723 / 177.9</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Flip 7</strong></p></td><td  ><p>19,144 / 114.64</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>26,608 / 165.3</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>30,980 / 185.51</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>20,529 / 123.83</p></td></tr></tbody></table></div><p>Out of the bunch, the Galaxy Z Fold 8 Ultra once again claims the top spot, breaking past the 30,000 threshold with a high score of 30,980 and an average frame rate of 185.51 fps. The latter is honestly mind boggling and shows the kind of graphic processing muscle power it’s packing.</p><p>The compact Galaxy Z Flip 8 delivers another impressive showing, taking second place with a score of 29,723 and 177.90 fps, outperforming the Galaxy Z Fold 8, which logged a score of 26,608 and 165.30 fps. While all three foldables deliver plenty of graphical muscle for mobile gaming, the Ultra and Flip 8 demonstrate a noticeable edge in peak rendering speeds for those who can’t afford a sliver of choppy gameplay.</p><p>Again, the biggest year-over-year improvement goes to the Z Flip 8, which achieves a 55.3% higher score and a 55.2% boost in average frame rate over the Z Flip 7. I can’t stress enough the immense graphical power boost it’s getting going from an Exynos to a Snapdragon.</p><p>As for the Z Fold 8 Ultra? It tells a similar story of dominant growth by delivering a 50.9% increase in overall score and a 49.8% jump in frame rate performance compared to the Z Fold 7. This, obviously, should result in gameplay being a lot smoother.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Wild Life Unlimited (score / FPS)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Ultra (2026)</strong></p></td><td  ><p>24437 / 146.33</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>21,580 / 129.23</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro Fold</strong></p></td><td  ><p>13,306 / 79.68</p></td></tr></tbody></table></div><p>In the battle of the clamshells, the Z Flip 8 holds a commanding lead over its primary rival, the Motorola Razr Ultra (2026). In fact, Samsung's flip phone maintains a solid 21.6% advantage in both overall score and frame rate rendering.</p><p>Samsung’s dominance is even more pronounced in the book-style category, where the Galaxy Z Fold 8 Ultra delivers 43.6% higher graphical performance than the Razr Fold. That gap widens tremendously against the Pixel 10 Pro Fold, with the Z Fold 8 Ultra boasting a mind-boggling 132.8% lead over Google’s flagship foldable.</p><h2 class="article-body__section" id="section-galaxy-z-flip-8-vs-fold-8-vs-fold-8-ultra-verdict"><span>Galaxy Z Flip 8 vs Fold 8 vs Fold 8 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:2797px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="jDQR6ZY2cx8T5NxgCddxW" name="Samsung Galaxy Z 8 lineup" alt="Samsung Galaxy Z 8 lineup." src="https://cdn.mos.cms.futurecdn.net/jDQR6ZY2cx8T5NxgCddxW.jpg" mos="" align="middle" fullscreen="" width="2797" height="1573" attribution="" endorsement="" class="inline"></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’s decision to go all-in on Qualcomm’s Snapdragon 8 Elite Gen 5 silicon across its entire 2026 lineup pays off. All three foldables deliver generational leaps in raw CPU processing and peak graphical output.</p><p>However, if you want the absolute pinnacle of performance, the Galaxy Z Fold 8 Ultra reigns supreme — dominating every metric while outpacing rivals like the Pixel 10 Pro Fold and Motorola Razr Fold.</p><p>Meanwhile, the compact Galaxy Z Flip 8 emerges as the surprise hero of the bunch, proving that big things come in small packages. While the standard Galaxy Z Fold 8 remains a dependable workhorse, Samsung’s new devices aren't just incremental upgrades — they set a new benchmark for foldables.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYddRO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYddRO.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/i-just-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt">I just spent 24 hours with the Galaxy Z fold 8 Ultra — here's what I liked and what I didn't</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview">‘We're pretty confident': How Samsung plans to fight the first foldable iPhone</a></li><li><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">I just ditched my iPhone for the Z Fold 8 — Android 17’s new migration tool is pure magic, but there is one painful catch</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Best Samsung Galaxy Z Flip 8 cases to shield your new foldable — from $19 ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/best-samsung-galaxy-z-flip-8-cases-to-shield-your-new-foldable-from-usd19</link>
                                                                            <description>
                            <![CDATA[ Samsung's Galaxy Z Flip 8 smartphone is officially on its way. Here are nine durable cases from Samsung and other brands to keep it safe and clean. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">M7dv3oYE63BJPHMBVAn46T</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Jkgfu3aZXtKkhn9dbxn7Vh-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 24 Jul 2026 13:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Will Salmon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/HpRWP7Mh9ErgRGoTvZBbBJ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Will Salmon is Tom&#039;s Guide&#039;s Collections Editor, curating advice on the best products to spend your money on. Will has been writing about tech and entertainment for almost 20 years, including stints as GamesRadar+&#039;s Streaming Editor, editing comics website Newsarama, and writing for lots and lots of magazines.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Jkgfu3aZXtKkhn9dbxn7Vh-1280-80.jpg">
                                                            <media:credit><![CDATA[Samsung / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of Galaxy Z Flip 8 cases.]]></media:description>                                                            <media:text><![CDATA[A selection of Galaxy Z Flip 8 cases.]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of Galaxy Z Flip 8 cases.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Jkgfu3aZXtKkhn9dbxn7Vh-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung's new wave of foldable smartphones has officially been revealed. As well as the <a href="https://www.tomsguide.com/phones/samsung-phones/9-best-samsung-galaxy-z-fold-8-and-fold-8-ultra-cases-to-protect-your-new-smartphone-from-usd19">Galaxy Z Fold 8 and Fold 8 Ultra</a>, the brand is launching the new Galaxy Z Flip 8 — a compact and lightweight AI-powered flip phone that's packed with features.</p><p>If you're excited for the Flip 8's release on August 7 then you may want to prepare by picking up a protective case now – after all, you're going to want to keep your new foldable in great condition for as long as possible. </p><p>I've picked out nine of my favorites below, including some official Samsung ones and a few by third party brands. Prices start at just $19, so there's a case here for every budget and some fun designs and colors to choose from.</p>        <div class="featured_product_block featured_block_hero" data-id="222486d6-86a1-11f1-9978-8f2ce4bed7a4">            <a href="https://www.amazon.com/FNTCASE-Samsung-Galaxy-Flip-Case/dp/B0GYXRWLB2/" data-model-name="Fntcase for Samsung Galaxy Z Flip 8" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:99.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2QSu6GSAPH3mkQdZRb3Pua.jpg" alt="Fntcase for Samsung Galaxy Z Flip 8 Case: [hinge Protection + Screen Protector] [fit for Magsafe] Military Grade Drop Proof, Translucent Matte Protective Phone Cover - Black"></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 Samsung Galaxy Z Flip 8</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2224874e-86a1-11f1-948d-6ff9f59c0a2e">            <a href="https://www.spigen.com/products/galaxy-z-flip-8-series-glas-tr-ez-fit?variant=45515045371951" data-model-name="Spigen Glas.tr Ez Fit case for Galaxy Z Flip 8" 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/EdQurdfvhBhH6zRvpLn3Bb.jpg" alt="Galaxy Z Flip 8 Series - Glas.tr Ez 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 Glas.tr Ez Fit case for Galaxy Z Flip 8</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="222488a2-86a1-11f1-afca-cd95c00fa932">            <a href="https://www.spigen.com/products/galaxy-z-flip-8-series-core-armor-mag-fit?variant=45515222908975" data-model-name="Spigen Galaxy Z Flip 8 Core 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/srxutiLo6FStUHzCbMHrSh.jpg" alt="Spigen, Spigen Galaxy Z Flip 8 Core 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 Galaxy Z Flip 8 Core Armor case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="22248910-86a1-11f1-be1d-b3ddec5b71c3">            <a href="https://www.amazon.com/Spigen-Ultra-Hybrid-MagFit-Galaxy/dp/B0GKQFH9VG/" data-model-name="Spigen Ultra Hybrid Pro Magfit case for Galaxy Z Flip 8" 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/XAh38pJHcvSaCX7iF4Hy4c.jpg" alt="Spigen Ultra Hybrid Pro Magfit for Galaxy Z Flip 8 Case, Clear White"></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 Ultra Hybrid Pro Magfit case for Galaxy Z Flip 8</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="222487bc-86a1-11f1-a534-538c277bf838">            <a href="https://www.samsung.com/us/mobile-accessories/phones/galaxy-z-flip8-flipsuit-case-silver-sku-ef-ff776cjegus/" data-model-name="Galaxy Z Flip8 Flipsuit Case, Silver" 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/S8M9B844EKTjUghPm8HefC.jpg" alt="Samsung, Galaxy Z Flip8 Flipsuit Case, Silver"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Samsung</div>                                        <div class="featured__title">Galaxy Z Flip8 Flipsuit Case, Silver</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="22248a64-86a1-11f1-9f59-0590fef549dd">            <a href="https://new.ipitaka.com/products/sunset-moonrise-phone-cases?variant=43625602187334" data-model-name="Sunset Moonrise Phone Cases - Samsung Galaxy Z Flip7 / Moonrise | Edge 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/jUTqYFtsbQzjYJXgrGHE6Z.jpg" alt="Pitaka Moment Moonrise Galaxy Z Flip 8 case."></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">Sunset Moonrise Phone Cases - Samsung Galaxy Z Flip7 / Moonrise | Edge Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="22248988-86a1-11f1-8659-c7a842e1e13c">            <a href="https://www.samsung.com/us/mobile-accessories/phones/galaxy-z-flip8-silicone-ring-magnet-case-pink-sku-ef-ef776cvegus/" data-model-name="Samsung Galaxy Z Flip 8 Silicone Ring Magnet 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/vCHjm97CSr6WDv8fr3gUDa.jpg" alt="Samsung, Samsung Galaxy Z Flip 8 Silicone Ring Magnet case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Samsung</div>                                        <div class="featured__title">Samsung Galaxy Z Flip 8 Silicone Ring Magnet case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="222489f6-86a1-11f1-a46d-a13ab2afd500">            <a href="https://www.amazon.com/pitaka-Caseless-Touch-Feeling-Sunset/dp/B0H5VLK3C7/" data-model-name="Pitaka for Z Flip 8 Sunset 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/4sTg8YiLaoeDkNRBW2zEhc.jpg" alt="Pitaka for Z Flip 8 Case, Caseless Touch Feeling, Sunset"></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 for Z Flip 8 Sunset case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2224882a-86a1-11f1-b995-ff835c77d9b2">            <a href="https://www.samsung.com/us/mobile-accessories/phones/galaxy-z-flip8-mirror-magnet-case-pinggu-black-sku-gp-fpf776hicbu/" data-model-name="Samsung Galaxy Z Flip 8 Pingu Mirror Magnet 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/6YbZzAP6TRHAJRHfTjSrrW.jpg" alt="Samsung, Samsung Galaxy Z Flip 8 Pingu Mirror Magnet Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Samsung</div>                                        <div class="featured__title">Samsung Galaxy Z Flip 8 Pingu Mirror Magnet Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Ultra delay leak right after Samsung's triumphant Galaxy Fold 8 launch has me sick of waiting for Apple's foldable ]]></title>
                                                                                                                                                                                                <link>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</link>
                                                                            <description>
                            <![CDATA[ Samsung just released its own iPhone Ultra rival, while Apple's first foldable attempt might be delayed again. At this point, I'm truly sick of how slow Apple moves. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">frFdxDJXaGaN8JApawo86H</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aUJZxCfMMXC3m2nKLVB2dV-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 24 Jul 2026 11:54:37 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/aUJZxCfMMXC3m2nKLVB2dV-1280-80.jpg">
                                                            <media:credit><![CDATA[Majin Bu on X]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Fold design ]]></media:description>                                                            <media:text><![CDATA[iPhone Fold design ]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Fold design ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aUJZxCfMMXC3m2nKLVB2dV-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The question of "when will the<a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone"> iPhone Ultra</a> actually be released" still doesn't seem to have an answer. After some back and forth over whether the first Apple foldable will be released alongside <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-rumors-everything-we-know-so-far">iPhone 18 Pro</a>, another report from <a href="https://www.digitimes.com/news/a20260723PD226/apple-foldable-iphone-production-market.html" target="_blank">DigiTimes</a> suggests that the actual release date for the foldable still remains uncertain</p><p>At this point I don't know who I should believe, and the only thing I know is that I am so tired of hearing about if and when the foldable iPhone might arrive. Especially now that <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-unpacked-2026-preview-galaxy-z-fold-8-z-flip-8-intelligent-eyewear-and-more">Samsung has just launched a new wave of foldables</a>, including its own passport-style<a href="https://www.tomsguide.com/phones/samsung-phones/my-first-36-hours-with-the-samsung-galaxy-z-fold-8-i-was-wrong-about-the-passport-screen-but-that-usd1-899-price-still-stings"> Galaxy Z Fold 8</a> that could rival Apple's foldable ambitions.</p><p>I just wish Apple would start hustling and release this thing, because it feels like everything even remotely new gets stuck in a perpetual state of "it might arrive this year."</p><h2 id="the-current-deal-with-the-iphone-ultra">The current deal with the iPhone Ultra</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1992px;"><p class="vanilla-image-block" style="padding-top:56.28%;"><img id="hxWF8JHH73hydhmk2vQ4mY" name="iPhone Fold" alt="A render of the potential upcoming iPhone foldable device" src="https://cdn.mos.cms.futurecdn.net/hxWF8JHH73hydhmk2vQ4mY.jpg" mos="" align="middle" fullscreen="" width="1992" height="1121" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>According to <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-delay-rumors-shot-down-in-new-report-now-apples-first-foldable-phone-may-launch-alongside-iphone-18-pro-after-all">previous reports</a>, iPhone Ultra mass production began earlier this month. The final assembly is reportedly being carried out by long-time Apple collaborator Foxconn, who DigiTimes's sources claim are "the only partner likely to have a realistic chance of meeting the expected production target."</p><p>It's unclear whether that production target means the full <a href="https://www.tomsguide.com/phones/iphones/apple-expects-10-million-people-to-buy-a-usd2-500-iphone-ultra-and-its-a-huge-gamble">10 million units Apple has reportedly ordered</a>, or simply enough to satisfy demand during the initial release window.</p><p>Foxconn is apparently in the process of "final mass-production adjustments," which has led to even more speculation that the iPhone Ultra may be delayed after all. While it's widely assumed that the phone will be unveiled alongside iPhone 18 Pro at Apple's September event, the actual release date remains unknown.</p><p>Last we heard Apple's suppliers believed <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-delay-rumors-shot-down-in-new-report-now-apples-first-foldable-phone-may-launch-alongside-iphone-18-pro-after-all">everything was still on track</a>, and the iPhone Ultra was shaping up to release alongside iPhone 18 Pro and <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-rumors-and-leaks-everything-we-know-so-far">iPhone 18 Pro Max</a>. But any hypothetical issues could alter the release schedule depending on the severity of the problem.</p><p><a href="https://www.tomsguide.com/phones/iphones/iphone-fold-release-date-just-tipped-for-delay-it-could-arrive-months-after-iphone-18-pro">Past reports suggested</a> that the hinge structure and display durability could be the real sticking points — especially with Apple pushing to release an "exceptionally refined product."</p><p>While the foldable is expected to be very expensive, with a <a href="https://www.tomsguide.com/phones/iphones/usd1-299-iphone-18-pro-max-analyst-now-predicts-usd200-price-hike-for-apples-next-flagship-phone">rumored starting price around $2,500</a>, demand is <a href="https://www.tomsguide.com/phones/iphones/apples-foldable-iphone-ultra-may-not-be-released-at-the-same-time-as-the-iphone-18-pro-heres-why">still expected to be rather high</a>. Prolonged issues would force Apple to push back the release, to try and ensure there is enough supply to match release-day demand.</p><p>So while there's no need to panic about this right now, this back-and-forth over the fate of the iPhone Ultra is really starting to get tiresome. to the point where I'm starting to resent the fact that Apple seems to have taken so long to actually release the phone.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WQnnNO"></div>                            </div>                            <script src="https://kwizly.com/embed/WQnnNO.js" async></script><h2 id="just-release-the-thing-already">Just release the thing already</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1964px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="jKyo3FUB76apN2dfooDL9d" name="iPhone Fold render edit 1-2" alt="Renders of the potential iPhone foldable device" src="https://cdn.mos.cms.futurecdn.net/jKyo3FUB76apN2dfooDL9d.jpg" mos="" align="middle" fullscreen="" width="1964" height="1105" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: FPT)</span></figcaption></figure><p>Maybe it's just because September's iPhone launch event is coming up fairly soon, or maybe it's just because foldable iPhone rumors have been circulating for the better part of a decade. We're at the stage now when I'm sick and tired of hearing about it, and wish Apple would hurry up and get the iPhone Ultra out into the world.</p><p>I'd even settle for an announcement and confirmation that the Ultra will actually arrive a few months later than the iPhone 18 Pro. It happened with the <a href="https://www.tomsguide.com/us/iphone-x,review-4800.html">iPhone X</a> back in 2017, and I feel like the knowledge that a release date is confirmed would be quite comforting — and would certainly put the majority of these rumors to bed.</p><p>The crazy thing is that this problem isn't exclusive to the iPhone Ultra. It actually seems to happen to most major Apple releases, with rumors circulating multiple years before the final product ever gets released.</p><p>The most infamous example is the <a href="https://www.tomsguide.com/news/apple-car-everything-we-know-so-far">Apple Car</a>, which was in development for a decade before Apple realized it had bitten off more than it could chew. Who knew that trying to develop a fully-autonomous car from nowhere wasn't going to work out? So the project was canceled, and some of the stuff Apple learned <a href="https://www.tomsguide.com/ai/apple-intelligence/the-apple-car-development-may-not-have-been-as-big-a-waste-of-time-and-money-as-everyone-thought-in-fact-it-may-be-the-thing-that-enabled-apples-new-ai-boom">was rolled into its ongoing work with AI and Apple Intelligence.</a></p><p>A similar situation to the iPhone Ultra happened with <a href="https://www.tomsguide.com/computing/smart-glasses/apple-vision-pro-review">Apple Vision Pro</a>. Rumors of an <a href="https://www.tomsguide.com/news/apple-may-be-releasing-arvr-headset-in-2020-after-all">Apple VR or mixed reality headset</a> circulated for multiple years, and I distinctly remember a lot of rumors and speculation that Apple could reveal it at the next Apple event. </p><p>We've been seeing something similar happen with <a href="https://www.tomsguide.com/computing/smart-glasses/apple-glasses-everything-we-know-so-far">Apple Glasses</a> and the long-awaited <a href="https://www.tomsguide.com/home/smart-home/apple-smart-home-hub-we-just-got-bad-news-about-the-release-window">Siri-powered smart home hub</a>. It's not Apple's problem that these things leak so early, and we've seen it make a concerted effort to plug leaks over the years, but it makes it feel as though these new products are being developed at a snail's pace.</p><h2 id="bottom-line-2">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:3000px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="y8ttnRFF7wEwtwXBQBhntU" name="Apple 2026 A iPhone Fold" alt="Render of a potential folding iPhone" src="https://cdn.mos.cms.futurecdn.net/y8ttnRFF7wEwtwXBQBhntU.jpg" mos="" align="middle" fullscreen="" width="3000" height="1501" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I've always argued that Apple has been a little too particular about when it releases new products. It often feels as though the company has been so <a href="https://www.tomsguide.com/phones/iphones/iphone-flip-should-have-been-released-years-ago-its-time-apple-started-taking-risks-again">hell-bent on making the "perfect" product </a>that it's willing to drag production out for an extended period of time as it attempts to chase an impossible dream. </p><p>The botched Apple Car development and the obsession over eliminating the display crease says to me that Apple has a problem with accepting when a new product is simply "good enough."</p><p>Others would argue that Apple was wise to wait, in an attempt to make the best foldable phone possible. Studying the market, working out the issues that can be fixed, them jumping in to knock Samsung off its throne. </p><p>Considering the foldable phone market is rather small, you could argue that Apple isn't really missing out by waiting and endeavoring to make the best foldable it can — even if it takes several years. </p><p>That doesn't make the constant talk of what may or may not be happening any less exhausting, though. It's at the point that I feel Apple should really have released the iPhone Ultra three or four years ago. So, the sooner it actually makes it to Apple Store shelves, the happier I will be.</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-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt">I just spent 24 hours with the Galaxy Z fold 8 Ultra — here's what I liked and what I didn't</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview">‘We're pretty confident': How Samsung plans to fight the first foldable iPhone</a></li><li><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">I just ditched my iPhone for the Z Fold 8 — Android 17’s new migration tool is pure magic, but there is one painful catch</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ My first 36 hours with the Samsung Galaxy Z Fold 8: I was wrong about the passport screen (but that $1,899 price still stings) ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/my-first-36-hours-with-the-samsung-galaxy-z-fold-8-i-was-wrong-about-the-passport-screen-but-that-usd1-899-price-still-stings</link>
                                                                            <description>
                            <![CDATA[ I spent 36 hours with the new Samsung Galaxy Z Fold 8. Here is why the new passport display, Flex Titanium crease, and battery life won me over. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jmy3pUQsyZxCmkqHWbv4Tc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/9o3ZXWLLHpwvgcvMCvDJ7V-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 24 Jul 2026 09:58:13 +0000</pubDate>                                                                                                                                <updated>Fri, 24 Jul 2026 11:48:50 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/9o3ZXWLLHpwvgcvMCvDJ7V-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 in hand showing cover display against a wall with graffiti]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 in hand showing cover display against a wall with graffiti]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 in hand showing cover display against a wall with graffiti]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/9o3ZXWLLHpwvgcvMCvDJ7V-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>You may have seen that Samsung showed me all of its <a href="https://www.tomsguide.com/phones/samsung-phones/i-held-samsungs-secret-canceled-z-fold-8-prototypes-and-they-killed-the-best-one">canceled prototypes of the Galaxy Z Fold 8</a>. That moment combined with my time flying to China and checking out this <a href="https://www.tomsguide.com/phones/iphones/i-just-tested-the-phone-everybody-thinks-is-a-preview-of-the-iphone-fold-god-i-hope-theyre-wrong">future of passport foldables that the iPhone Ultra</a> looks set to adopt made me nervous that this stubbier size isn’t quite right.</p><p>But after my first 36 hours with the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Z Fold 8</a>, I’m coming around to the idea of this aspect ratio choice. Maybe the weight of my previous experiences clouded my judgement, but now out in the real world, it’s starting to click and make sense. </p><p>Throw in a strong camera, good battery life and beasty internals, and this has been a great first day of using Samsung’s new blower. I’ve seen a bunch of questions and thoughts in our comments, so these 24 hours have been more focused on answering these.</p><figure class="inline-layout"><fw-embed-feed channel="toms_guide" playlist="5bJZYl" mode="row" player_placement="bottom-right"></fw-embed-feed></figure><h2 id="what-s-the-aspect-ratio-like">What’s the aspect ratio 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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9twLgAps2V4aAgB93fMayR" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/9twLgAps2V4aAgB93fMayR.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>We’ve been used to taller foldables that open out to a much more squared-off display for years now. Of course, other companies have tried the squished form factor like this, but this is Samsung’s first stab at it.</p><p>And honestly? At first I was feeling weird about it. Don’t get me wrong here, the smaller design does feel great to hold, and the one-handed operation feels like a blast from the past when small phones were cool.</p><p>That being said, the aspect ratio choice made here is a tough one to make — forming an awkward balance that black bars vertical content on the outside screen, as well as landscape on that 4:3 screen on the inside. Given the way “<a href="https://www.tomsguide.com/entertainment/movies/the-odyssey-review">The Odyssey</a>” is filmed in 70mm IMAX, this phone must be Christopher Nolan’s dream come true.</p><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="pY2CmKMLZLmC2oGDYKPT7S" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/pY2CmKMLZLmC2oGDYKPT7S.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>But compared to the square of the Ultra, the size of content on this phone is <strong>much </strong>better. Catching up on Netflix is a joy on this screen, though the audio sounds a bit lop-sided when both speakers are on the left side, so headphones are a must.</p><p>And when it comes to getting stuff done, of course the Ultra is more angled towards that, but flipping this into a portrait 3:4 ratio is great for this specific job. Samsung worked on the software to optimize the keyboard for typing away, while the extra height does give you a lot of real estate for multi-tasking. </p><p>Also, big screen TikTok is fun, web browsing feels much better with this vertical canvas, and I now have a foldable Kindle in my pocket. Pretty sweet!</p><h2 id="is-the-crease-visible">Is the crease visible?</h2><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="6bxGdiam3BDqcSojZNdkyR" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/6bxGdiam3BDqcSojZNdkyR.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>Samsung made a whole thing about the use of a <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">titanium alloy film</a> atop the inside screen and titanium plate beneath it — with the mission being to improve durability and eliminate the crease.</p><p>Now, does it eliminate it? No. It’s a lot better than it has been before, but at certain angles with the light bouncing off it, you can see the outline of it. But you have to be <em>very </em>specific about it to see the thing.</p><p>Also, shout-out to that anti-reflective coating. Of course, the naming of it may feel a little misleading when you still see reflections bounce off of it. However, there is a noticeable reduction in the glare, and light sources have been dimmed quite a bit by whatever the coating is doing here.</p><h2 id="zippy-and-long-lasting">Zippy and long-lasting</h2><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="ouPQLdrqRKCXrqcAc6vDuR" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/ouPQLdrqRKCXrqcAc6vDuR.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>With Snapdragon 8 Elite Gen 5 for Galaxy inside with 12GB RAM does keep things nice and spritely under multitasking pressures for sure. And now that we’ve had these benchmarked in the lab, you can see this reflected in the numbers too.</p><div ><table><thead><tr><th class="firstcol " ><p>Phone</p></th><th  ><p>Geekbench 6 single-core</p></th><th  ><p>Geekbench 6 multicore</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td><td  ><p>3603</p></td><td  ><p>10949</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td><td  ><p>3785</p></td><td  ><p>11563</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>3871</p></td><td  ><p>9968</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Ultra</strong></p></td><td  ><p>2886</p></td><td  ><p>8982</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10 Pro Fold</strong></p></td><td  ><p>2334</p></td><td  ><p>6332</p></td></tr></tbody></table></div><p>That single-core speed especially manifests itself in a snappy, responsive UI and opening apps at breakneck speeds, while the multicore comes into effect when I’m hopping between apps running in the background.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3919px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="i9cFmSQeutRkXafFNF5UTX" name="Galaxy Z Fold 8-LIST2" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/i9cFmSQeutRkXafFNF5UTX.jpg" mos="" align="middle" fullscreen="" width="3919" height="2204" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Then there’s the battery — a 4,800 mAh cell that embraces silicon carbon battery tech to add a little more juice while keeping it thin and light. In our lab testing, we’ve been able to get 12 hours and 20 minutes out of it on one charge.</p><p>In real-life, I’ve been able to get through an entire day of standard use with no real worries. Starting from 100%:</p><ul><li><strong>Two hours at the gym with music playing and regular screen opening to read news between sets: </strong>Battery went down to 92%</li><li><strong>Two hours on the phone with my wife — visiting websites on inside screen to finalize wedding celebration plans: </strong>Battery went down to 84%</li><li><strong>TikTok wormhole on inside screen for an hour: </strong>Battery went down to 79%</li><li><strong>Photography trip around London, multitasking between messaging apps, TikTok on the Underground, a couple phone calls, web browsing, and taking many photos: </strong>Battery went down to 64%</li></ul><p>By the time I got to the Nvidia afterparty at 10pm, the battery was at around 50%. Of course, if I’m more sparing with my use, you can make this run much longer. But it’s clear you’re getting all-day usage with no problems.</p><h2 id="snap-happy">Snap happy</h2><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="oamV7tYGgYvikv5tkwbSFS" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/oamV7tYGgYvikv5tkwbSFS.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>I always have a beef with Samsung about its camera science. The hardware is always good, but coming from being an iPhone user, the focus on vividity always makes me feel like the phones of old have just vomited color all over the screen.</p><p>Not anymore. These dual 50MP shooters are <strong>impressive</strong>. Detail preservation is good and while color balance does lean towards the warmer tones, they’re not as distractingly vivid as before — keeping natural skin tones looking realistic.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/29iQeBJUpQQUAbSetehJpS.jpg" alt="Samsung Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/PGxQecLCXiBnVC3CQjqQfS.jpg" alt="Samsung Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QNP5MEL6HrDsn53sTA8JSS.jpg" alt="Samsung Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>And shout-out to night time photography too. I know Samsung made a whole song and dance about Nightography with the Ultra’s 200MP lens, but you’re getting more than enough of that experience with a quarter of the megapixels here.</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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gW5R8PkMJxqWV74zHBrCpR" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/gW5R8PkMJxqWV74zHBrCpR.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>This is the first foldable I’ve properly daily driven. I have tested others in the past of course, but this is my first concerted effort to ditch a candy bar and give folds a chance. And after my first day and a half, I get the attraction to it.</p><p>There was a part of me that feared this would be a pure gimmick. And to many of you reading this, chances are it will be. You’ve got to have very specific use cases on lock to make the most of this — the work and content needs for that bigger screen if you’re always on-the-go.</p><p>If you have them, this more easily pocketable foldable is a real conversation starter, and a genuinely nice form factor. My only real problem is that $1,899 price tag. It’s massive to say the least! You can feel the premium nature of this phone, but that’s a huge cost to put on people. </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-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt">I just spent 24 hours with the Galaxy Z fold 8 Ultra — here's what I liked and what I didn't</a></li><li><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">I just ditched my iPhone for the Z Fold 8 — Android 17’s new migration tool is pure magic, but there is one painful catch</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/id-buy-a-galaxy-z-fold-8-over-the-z-fold-8-ultra-and-its-all-because-it-steals-this-z-trifold-feature">I'd buy a Galaxy Z Fold 8 over the Z Fold 8 Ultra — and it's all because it steals this Z TriFold feature</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Flip 8 pre-orders — top deals and offers in Australia ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-deals-au</link>
                                                                            <description>
                            <![CDATA[ The Samsung Galaxy Z Flip 8 is now up for pre-order, and Australia’s leading carriers and retailers are rolling out enticing discounts and bonus deals. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">PJPTLHcX5C5Ytu9VyzKyTW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UsDbKYaT4XPPXsE8AmtpCJ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 24 Jul 2026 06:29:06 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Stephen Lambrechts ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/JN3jEQpqyyt32as8AJJqXe.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Stephen Lambrechts is the Managing Editor of Tom&#039;s Guide AU and has written professionally across the categories of tech, film, television and gaming for the last 15 years. Before Tom&#039;s Guide, he spent several years as a Senior Journalist at TechRadar, had a brief stint as Editor in Chief at Official Xbox Magazine Australia, and worked at IGN. He&#039;s also written for such mags and sites as APC, TechLife Australia, T3, FilmInk, Daily Telegraph and AskMen. Additionally, he&#039;s a Tomatometer-approved critic on Rotten Tomatoes, and has offered his tech advice on radio and television.&lt;/p&gt;&lt;p&gt;He&#039;s an expert when it comes to smartphones, TVs, gaming and streaming, having contributed many reviews in each of those categories over the years. Despite his many articles on streaming, he&#039;s a passionate collector of physical media who enjoys listening to vinyl records and acquiring obscure horror movies from the &#039;60s, &#039;70s and 80s. He can usually be seen rocking the latest retro sneaker releases, particularly Air Jordans and Reebok Pumps. Occasionally, he also indulges in other non-hipster stuff, like hiking.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/UsDbKYaT4XPPXsE8AmtpCJ-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Flip 8 held in hand]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Flip 8 held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Flip 8 held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UsDbKYaT4XPPXsE8AmtpCJ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung has officially introduced the Galaxy Z Flip 8, and Australian pre‑orders are now open. The new model keeps the familiar 4.1‑inch cover screen and 6.9‑inch folding display, but both panels benefit from Samsung’s latest durability upgrades. The Galaxy Z Flip 8’s crease is noticeably reduced thanks to its updated hinge and the titanium‑alloy reinforcement beneath the display — the same structural upgrade introduced on the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Galaxy Z Fold 8</a> series.</p><p>The biggest practical change is under the hood: the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review">Galaxy Z Flip 8</a> jumps to a 4300mAh battery, a substantial lift from last year’s 3700mAh pack that gives the clamshell far more staying power. Charging remains at 25W wired and 15W wireless, but the larger battery alone makes a meaningful difference for day‑to‑day use.</p><p>The Galaxy Z Flip 8 hits Australian shelves on August 14, 2026, with prices starting at AU$1,949 and pre‑orders wrapping up at 11:59pm AEST on August 13. Retailers and telcos are already offering early‑bird perks like bonus store credit, higher trade‑in values, and discounted storage upgrades for those who secure their device before launch.</p><p>To save you the digging, we’ve rounded up every worthwhile Galaxy Z Flip 8 pre‑order offer below — and if you’re chasing extra savings, today’s <a href="https://www.tomsguide.com/au/coupons/samsung.com">Samsung discount codes</a> are also well worth a look.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-flip-8-offers"><span>Samsung Galaxy Z Flip 8 offers</span></h3><p>Samsung, Amazon Australia and Optus are offering the strongest value on the Galaxy Z Flip 8 during pre‑orders, with a mix of cashback, bonuses and sizeable plan discounts depending on how you prefer to buy.</p><p>If you’re grabbing the Galaxy Z Flip 8 outright, <a href="https://www.samsung.com/au/smartphones/galaxy-z-flip8/buy/">Samsung’s bundle of launch perks</a> is the most flexible. You can stack an Eco‑Voucher worth AU$150 when you use the code <strong>UNFOLD2026</strong> and pair the phone with other Samsung gear in the first 72 hours (dropping to AU$50 afterwards), plus AU$150 back when you check out with PayPal. Samsung is also offering AU$100 in bonus trade‑in credit for Flip buyers. </p><p>Amazon keeps things straightforward with a <a href="https://www.amazon.com.au/Samsung-Version-Hands-Free-Customisable-FlexWindow/dp/B0H7X7SRFV">AU$300 Amazon digital gift card included with Galaxy Z Flip 8 pre‑orders</a>, making it the simplest outright deal of the bunch.</p><p>For anyone looking for a telco plan to spreading the handset cost out into monthly instalments, Optus is the standout option. The carrier is <a href="https://www.optus.com.au/mobile/phones/samsung/galaxy-z-flip8">taking AU$750 off the Galaxy Z Flip 8</a> on eligible repayment plans and pairing it with discounted SIM pricing for the first year. Vodafone’s trade-in offer is smaller but still worthwhile: <a href="https://www.vodafone.com.au/mobile/mobile-phones/samsung/samsung-galaxy-z-flip8">AU$500 off the handset on a 24‑ or 36‑month plan</a>, plus a AU$300 trade‑in bonus for eligible devices.</p><p>Below, you’ll find a full breakdown of every worthwhile Galaxy Z Flip 8 pre‑order offer available in Australia right now — from outright savings to carrier discounts and trade‑in bonuses — so you can lock in the best value before launch day.</p><div class="product"><a data-dimension112="9fe88646-86fe-11f1-8f75-193cdeb48199" data-action="Deal Block" data-label="Samsung: AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" data-dimension48="Samsung: AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" href="https://www.samsung.com/au/smartphones/galaxy-z-flip8/buy/" target="_blank" rel="sponsored"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="g2Lu9U9HTxMfgS4ck3uDBd" name="Samsung-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/g2Lu9U9HTxMfgS4ck3uDBd.jpg" mos="" align="middle" fullscreen="" width="4000" height="4000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Samsung: </strong><a href="https://www.samsung.com/au/smartphones/galaxy-z-flip8/buy/" target="_blank" data-dimension112="9fe88646-86fe-11f1-8f75-193cdeb48199" data-action="Deal Block" data-label="Samsung: AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" data-dimension48="Samsung: AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" data-dimension25=""><strong>AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit</strong></a></p><p>If you buy straight from Samsung, you can layer a few discounts at checkout. You'll get up to AU$150 off with code <strong>UNFOLD2026</strong> when you bundle the phone with a Samsung ecosystem device until July 25 (the code then drops down to AU$50 in value for the rest of the pre-order period), and an extra AU$150 back if you pay with PayPal. Additionally, you can get up to AU$100 in bonus trade-in credit. <a class="view-deal button" href="https://www.samsung.com/au/smartphones/galaxy-z-flip8/buy/" target="_blank" rel="sponsored" data-dimension112="9fe88646-86fe-11f1-8f75-193cdeb48199" data-action="Deal Block" data-label="Samsung: AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" data-dimension48="Samsung: AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="9fe886aa-86fe-11f1-8908-ff8dd4cb6394" data-action="Deal Block" data-label="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Flip 8" data-dimension48="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Flip 8" href="https://www.amazon.com.au/Samsung-Version-Hands-Free-Customisable-FlexWindow/dp/B0H7X7SRFV" 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="EaJx7PLL3rAQSY9BEgEGi3" name="Amazon-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EaJx7PLL3rAQSY9BEgEGi3.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Amazon: </strong><a href="https://www.amazon.com.au/Samsung-Version-Hands-Free-Customisable-FlexWindow/dp/B0H7X7SRFV" target="_blank" data-dimension112="9fe886aa-86fe-11f1-8908-ff8dd4cb6394" data-action="Deal Block" data-label="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Flip 8" data-dimension48="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Flip 8" data-dimension25=""><strong>Get AU$300 Amazon store credit when you pre-order Galaxy Z Flip 8</strong></a></p><p>Amazon is keeping it simple for outright buyers: every pre-order of the <a href="https://www.amazon.com.au/Samsung-Version-Hands-Free-Customisable-FlexWindow/dp/B0H7X7SRFV" target="_blank">Galaxy Z Flip 8</a> comes with AU$300 in Amazon store credit for free. If you trade in an old phone, you can also get an Amazon gift card valued at up to AU$800. This offer is available until 11:59pm AEST on August 13, 2026.<a class="view-deal button" href="https://www.amazon.com.au/Samsung-Version-Hands-Free-Customisable-FlexWindow/dp/B0H7X7SRFV" target="_blank" rel="nofollow" data-dimension112="9fe886aa-86fe-11f1-8908-ff8dd4cb6394" data-action="Deal Block" data-label="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Flip 8" data-dimension48="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Flip 8" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="9fe888f8-86fe-11f1-b8c7-af58f39a6371" data-action="Deal Block" data-label="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Flip 8" data-dimension48="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Flip 8" href="https://www.jbhifi.com.au/collections/mobile-phones/samsung-galaxy-z-flip8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="dUMxuvDTBa7Tnj2jRqi8ME" name="JB-Hi-Fi-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dUMxuvDTBa7Tnj2jRqi8ME.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>JB Hi-Fi: </strong><a href="https://www.jbhifi.com.au/collections/mobile-phones/samsung-galaxy-z-flip8" target="_blank" data-dimension112="9fe888f8-86fe-11f1-b8c7-af58f39a6371" data-action="Deal Block" data-label="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Flip 8" data-dimension48="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Flip 8" data-dimension25=""><strong>Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Flip 8</strong></a></p><p>JB Hi-Fi offers an easy-to-use retail perk by including a AU$300 JB Hi-Fi Gift Card (digital or in-store) with all Z Flip 8 Ultra pre-orders. This makes JB Hi-Fi a decent option for outright buyers, though it's worth noting that Amazon's offer provides just as much value in terms of store credit. This offer is valid until 11:59pm AEST on August 13, 2026.<a class="view-deal button" href="https://www.jbhifi.com.au/collections/mobile-phones/samsung-galaxy-z-flip8" target="_blank" rel="nofollow" data-dimension112="9fe888f8-86fe-11f1-b8c7-af58f39a6371" data-action="Deal Block" data-label="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Flip 8" data-dimension48="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Flip 8" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="9fe88966-86fe-11f1-bf2c-732ead9910cc" data-action="Deal Block" data-label="Optus: Get a AU$750 discount when you buy any Galaxy Z Flip 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" data-dimension48="Optus: Get a AU$750 discount when you buy any Galaxy Z Flip 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" href="https://www.optus.com.au/mobile/phones/samsung/galaxy-z-flip8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="YwvBBB6x3H2wXEEEevoNYC" name="Optus-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YwvBBB6x3H2wXEEEevoNYC.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Optus: </strong><a href="https://www.optus.com.au/mobile/phones/samsung/galaxy-z-flip8" target="_blank" data-dimension112="9fe88966-86fe-11f1-bf2c-732ead9910cc" data-action="Deal Block" data-label="Optus: Get a AU$750 discount when you buy any Galaxy Z Flip 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" data-dimension48="Optus: Get a AU$750 discount when you buy any Galaxy Z Flip 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" data-dimension25=""><strong>Get a AU$750 discount when you buy any Galaxy Z Flip 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans</strong></a></p><p>Optus offers a simplified, model-agnostic plan deal by slashing AU$750 off any model in the lineup (Z Fold 8 or Z Fold 8 Ultra) on a 12-, 24-, or 36-month repayment plan. To complement the device discount, Optus also takes AU$15p/m off Choice Plus SIM-only mobile plans for the first 12 months. This offer ends on August 12, 2026.<a class="view-deal button" href="https://www.optus.com.au/mobile/phones/samsung/galaxy-z-flip8" target="_blank" rel="nofollow" data-dimension112="9fe88966-86fe-11f1-bf2c-732ead9910cc" data-action="Deal Block" data-label="Optus: Get a AU$750 discount when you buy any Galaxy Z Flip 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" data-dimension48="Optus: Get a AU$750 discount when you buy any Galaxy Z Flip 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="9fe889d4-86fe-11f1-8055-5935a795fb57" data-action="Deal Block" data-label="Vodafone: Save up to AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan" data-dimension48="Vodafone: Save up to AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan" href="https://www.vodafone.com.au/mobile/mobile-phones/samsung/samsung-galaxy-z-flip8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:550px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="QfajE7yyJxPSmrv4c6Jwv7" name="vodafone logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QfajE7yyJxPSmrv4c6Jwv7.jpg" mos="" align="middle" fullscreen="" width="550" height="550" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Vodafone: </strong><a href="https://www.vodafone.com.au/mobile/mobile-phones/samsung/samsung-galaxy-z-flip8" target="_blank" data-dimension112="9fe889d4-86fe-11f1-8055-5935a795fb57" data-action="Deal Block" data-label="Vodafone: Save up to AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan" data-dimension48="Vodafone: Save up to AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan" data-dimension25=""><strong>Save up to AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan</strong></a></p><p>Vodafone knocks AU$500 off both capacities of Z Flip 8 on 24- or 36-month repayment contracts. Customers signing up can also claim a AU$300 bonus trade-in credit and gain access to deep wearable discounts, taking up to AU$200 off the Galaxy Watch 9 or AU$500 off the Galaxy Watch Ultra 2 when bundled together. This offer ends August 13, 2026.<a class="view-deal button" href="https://www.vodafone.com.au/mobile/mobile-phones/samsung/samsung-galaxy-z-flip8" target="_blank" rel="nofollow" data-dimension112="9fe889d4-86fe-11f1-8055-5935a795fb57" data-action="Deal Block" data-label="Vodafone: Save up to AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan" data-dimension48="Vodafone: Save up to AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="9fe88a38-86fe-11f1-a702-63257493ae2c" data-action="Deal Block" data-label="Telstra: Save AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan + AU$300 bonus trade-in creditTelstra is knocking AU$500 off the Z Flip 8 if you put the phone on a 12-, 24- or 36-month plan. You can also get a AU$300 trade-in bonus on top of your old device's trade-in value. This offer ends August 13, 2026." data-dimension48="Telstra: Save AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan + AU$300 bonus trade-in creditTelstra is knocking AU$500 off the Z Flip 8 if you put the phone on a 12-, 24- or 36-month plan. You can also get a AU$300 trade-in bonus on top of your old device's trade-in value. This offer ends August 13, 2026." target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="f5n3uyYaoTiQepuaUPfaBg" name="telstra-square-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/f5n3uyYaoTiQepuaUPfaBg.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Telstra: Save AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan + AU$300 bonus trade-in credit</strong></p><p>Telstra is knocking AU$500 off the Z Flip 8 if you put the phone on a 12-, 24- or 36-month plan. You can also get a AU$300 trade-in bonus on top of your old device's trade-in value. This offer ends August 13, 2026.<a class="view-deal button" href="" target="_blank" rel="nofollow" data-dimension112="9fe88a38-86fe-11f1-a702-63257493ae2c" data-action="Deal Block" data-label="Telstra: Save AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan + AU$300 bonus trade-in creditTelstra is knocking AU$500 off the Z Flip 8 if you put the phone on a 12-, 24- or 36-month plan. You can also get a AU$300 trade-in bonus on top of your old device's trade-in value. This offer ends August 13, 2026." data-dimension48="Telstra: Save AU$500 when purchasing Galaxy Z Flip 8 on an eligible 24- or 36-month plan + AU$300 bonus trade-in creditTelstra is knocking AU$500 off the Z Flip 8 if you put the phone on a 12-, 24- or 36-month plan. You can also get a AU$300 trade-in bonus on top of your old device's trade-in value. This offer ends August 13, 2026." data-dimension25="">View Deal</a></p></div><h2 id="galaxy-z-flip-8-price-and-specs">Galaxy Z Flip 8 price and specs</h2><div ><table><tbody><tr><td class="firstcol " ><p><strong>Price</strong>    </p></td><td  ><p>From AU$1,949</p></td></tr><tr><td class="firstcol " ><p><strong>Release date</strong></p></td><td  ><p>August 14</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong>    </p></td><td  ><p>6.9-inch AMOLED (1080 x 2520, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong>    </p></td><td  ><p>4.1-inch AMOLED (948 x 1048, 60Hz / 120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong>    </p></td><td  ><p>Exynos 2600</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>50MP main (f/1.8), 12MP ultrawide (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Camera</strong>    </p></td><td  ><p>10MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong>    </p></td><td  ><p>25W wired / 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong>    </p></td><td  ><p>4,300 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong>    </p></td><td  ><p>166.9 x 75.4 x 6.1 mm (unfolded), 85.7 x 75.4 x 13.1mm (folded)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong>    </p></td><td  ><p>180 grams</p></td></tr><tr><td class="firstcol " ><p><strong>IP Rating</strong>    </p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong>    </p></td><td  ><p>Pink, Graphite, Cream, Mint (online)</p></td></tr></tbody></table></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I just spent 24 hours with the Galaxy Z fold 8 Ultra — here's what I liked and what I didn't ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/i-just-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt</link>
                                                                            <description>
                            <![CDATA[ Samsung galaxy Z Fold 8 is shaping up to be a great phone, but after 24 hours with the phone there are definitely some things I'd change. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Fti5JmQj4Fg6aqTrXwFdAQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/noN4XNdYP8ruPAPbWSqySm-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 24 Jul 2026 05: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.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/noN4XNdYP8ruPAPbWSqySm-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[samsung galaxy z fold 8 ultra sample photos]]></media:description>                                                            <media:text><![CDATA[samsung galaxy z fold 8 ultra sample photos]]></media:text>
                                <media:title type="plain"><![CDATA[samsung galaxy z fold 8 ultra sample photos]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/noN4XNdYP8ruPAPbWSqySm-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's always exciting to try a brand new phone, and those first 24 hours can be pretty telling. That's especially true when you're making the jump from a regular phone to a foldable, because the fold-out large screen design opens a whole new world of possibilities.</p><p>That's certainly how I felt while unpackaging the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Samsung Galaxy Z Fold 8 Ultra </a>— a phone that has so far been living up to its new designation. But a brief hands-on can only tell you so much about a phone, and it's only after spending several hours (or days) with your device that you can get a much clearer idea of what it has to offer.</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><p>The Galaxy Z Fold 8 Ultra could be one of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a>, pending our full review, thanks to the sheer amount of upgrades Samsung has added this year. But is it really all that? Let's go through my first day with this Ultra foldable, so you can experience the highs (and lows) of picking one up for yourself.</p><h2 id="setting-up">Setting up</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SxUXvGmQvGJ82W3KnAuTYm" name="PXL_20260723_153353658" alt="samsung galaxy z fold 8 ultra sample photos" src="https://cdn.mos.cms.futurecdn.net/SxUXvGmQvGJ82W3KnAuTYm.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The great thing about modern phones is that they've made the set up process an absolute breeze compared to what it used to be like. Samsung is easily one of the best I've used, especially if you're copying data over from another Samsung phone.</p><p>In fact my<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review"> Galaxy S26 Ultra</a> detected the Z Fold 8 Ultra right away, and brought up the QR code scanner to link these two devices together. The most troublesome part of the whole experience was flicking through the many menus asking you to confirm various permissions, and which search engine you'd like set as your default. </p><p>The actual transfer process happens in the background, beaming over apps, accounts, default settings and everything else you had sitting on your own phone. Since my S26 Ultra doesn't get a ton of use, that process was pretty quick, and your experience will differ depending on how much you actually need to beam to your new phone.</p><p>I also find myself pretty impressed with the way Galaxy foldables set up fingerprint recognition. Samsung phones are usually some of the easiest and fastest devices for setting up biometric security, but with the physical fingerprint scanner all you need to do is wiggle your chosen digit around during the mapping process. None of the tedious lifting and replacing motions that you get with under-display fingerprint scanners. </p><h2 id="adapting-to-new-displays">Adapting to new 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:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eLMVZ9zvqMV9V9gmY4nUfm" name="PXL_20260723_153800876" alt="samsung galaxy z fold 8 ultra sample photos" src="https://cdn.mos.cms.futurecdn.net/eLMVZ9zvqMV9V9gmY4nUfm.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>Switching to a foldable phone means adapting to a brand new set of displays. The 6.5-inch cover display offers a 21:9 aspect ratio, which is noticeably narrower than the 19:5:9 aspect ratio you'd find on most phones. </p><p>Having been used to using  6.3-inch non-folding phones for so long, the narrower form factor is taking some getting used to. To the point where I gravitate towards the 8-inch foldable display instead. It seems like a paradox, but I find the larger screen is a lot more comfortable to use — especially considering the doubled-screen is the perfect size for two-handed use.</p><p>As Samsung says, it's like having two 6.5-inch phones in a single phone.</p><p>One thing I noticed was that the Samsung web browser defaulted to the desktop view on both screens, and to my surprise I actually found it more comfortable to read that way. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EHKpRgYwit7wtK6JkUvEcm" name="PXL_20260723_154034644" alt="samsung galaxy z fold 8 ultra sample photos" src="https://cdn.mos.cms.futurecdn.net/EHKpRgYwit7wtK6JkUvEcm.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>Admittedly the text was rather small on the cover display, but the mobile option was too large and squashed together for me to read comfortably. It was almost like I had an accessibility feature that blew up the print for users with visual impairments. That said vertical videos looked perfect on the narrower cover display, with next to no wasted space. </p><p>That was not entirely true for horizontal video, but that just gave the foldable screen even more chance to shine. Especially since Flex Mode let me partially fold up the screen and use the Z Fold 8 Ultra as its own stand.</p><p>I'll admit, though, it does still feel as though something is missing with the larger screen, and <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">I feel like having some kind of S Pen support</a> would help complete the puzzle. I'm not entirely sure I would be using the stylus all that much, but it would be nice to have the option.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XbDPDW"></div>                            </div>                            <script src="https://kwizly.com/embed/XbDPDW.js" async></script><h2 id="not-quite-crease-free">Not quite crease-free</h2><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="MQkbeXqvtqBcXLFh5FTd94" name="PXL_20260723_104725084" alt="samsung galaxy z fold 8 side by side with z fold 7 to show of display creases" src="https://cdn.mos.cms.futurecdn.net/MQkbeXqvtqBcXLFh5FTd94.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the most anticipated upgrades on the Z fold 8 Ultra is the flex titanium display, which was heavily <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-may-eliminate-the-display-crease-too-step-aside-iphone-fold">rumored to eliminate the crease down the display</a>. It doesn't take long to spot that this is not really the case, and the <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">crease is still visible</a> in certain conditions.</p><p>That being said, the crease is a lot harder to see when compared to the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7.</a> It mostly shows up when the screen is switched off, or you find yourself in particularly bright conditions. The fact you have to go out of your way to see the crease means Samsung should be commended for what it's managed by adding the <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. </p><p>That said, you can still feel the crease when you're scrolling along the large display. It feels almost identical to the Z Fold 7's crease, and I have to admit the more I use the phone the more distracting it is to come across the dip in the middle of the screen. That's definitely something Samsung needs to work on for the Z Fold 9 Ultra.</p><h2 id="galaxy-class-performance">Galaxy-class performance?</h2><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="cTifXBtrnANVtbvxaBQhjm" name="PXL_20260723_153613981" alt="samsung galaxy z fold 8 ultra sample photos" src="https://cdn.mos.cms.futurecdn.net/cTifXBtrnANVtbvxaBQhjm.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>While I haven't done any benchmarking with the Galaxy Z Fold 8 Ultra yet, I have done some gaming to try and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-confirmed-the-most-obvious-galaxy-z-fold-8-upgrade-but-im-still-surprised">take the new Snapdragon 8 Elite Gen 5 for Galaxy chipset</a> for a spin. Loading up PUBG Mobile and I found that the settings automatically set the frame rate to the highest level, though it was being a little bit stingy with the graphics until I told it to up the ante.</p><p>The performance at the highest possible settings was excellent, as I'd hoped. I didn't notice any frame rate issues while I played, and the graphics were exactly what I expected from PUBG after dabbling with the game over the past few years. Better still I didn't even feel the phone get warm throughout an hour of playthrough, which is always best for the long-term health of the phone.</p><p>As for the battery, I found that this play session ate up around 5% of my battery, including the time it took to download the more advanced graphics. </p><p>Similarly, I forgot to charge the Z Fold 8 Ultra overnight, but still managed to get to around 3.45 p.m. before it flashed up a battery warning. That bodes well for the actual battery life, but since we haven't tested it I can't say whether Samsung's 27 hour battery life claim is accurate or not.</p><h2 id="cameras-are-so-far-so-samsung">Cameras are so-far so-Samsung</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mdwDsgb4mmvfC7T47Efewm" name="PXL_20260723_153702005" alt="samsung galaxy z fold 8 ultra sample photos" src="https://cdn.mos.cms.futurecdn.net/mdwDsgb4mmvfC7T47Efewm.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>I haven't had much need to take photos with the Z Fold 8 Ultra so far, but it's not like I need an excuse to snap photos of my dogs — especially when they make such adorable models. Needless to say, I'm impressed with the photos I've taken with the Galaxy Z Fold 8 Ultra so far.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Rau4SAqveDxu7PjRWnTELn.jpg" alt="samsung galaxy z fold 8 ultra sample photos" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/y2kGLKf8HndGP4TkV2YPM5.jpg" alt="labador" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ZSGz3vXpD6YgrRVP75jPAn.jpg" alt="samsung galaxy z fold 8 ultra sample photos" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/eg5zKpgcoFcSz8x9zdLykm.jpg" alt="samsung galaxy z fold 8 ultra sample photos" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RZ8K8YeYUkYsVtMUH36Yvm.jpg" alt="samsung galaxy z fold 8 ultra sample photos" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/j23D7nFQdRWzBFGi45WVnB.jpg" alt="tomato plant" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>The photos of my dogs and my plants came out looking pretty well, though I will admit that the main lens struggled with close-ups of my Lego minifigures. For some reason it just would not focus on what I wanted, meaning I had to resort to the lower-resolution Ultrawide angle lens to actually get this shot of Captain Jean-Luc Brickard. </p><p>You can kind of tell that the resolution isn't really there, though the photo itself still looks rather good. Sadly, the telephoto lens doesn't quite match up, and the quality feels more akin to the 10MP selfie cameras rather than the other two rear lenses. I wouldn't say it's taking bad photos, but they're not quite the caliber I would expect from a $2,100 phone.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Ms28JUWAB3P2Rnpb3zHGuh.jpg" alt="tom pritchard selfie" /><figcaption>200MP main lens<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Mcq9S4JHKy5LP24NgN28H5.jpg" alt="tom Pritchard" /><figcaption>10MP selfie lens<small role="credit">Future</small></figcaption></figure></figure><p>As for the selfie camera, I won't say that I dislike the photos it takes, but it falters compared to that main 200MP camera. The selfies feel a little grainier and washed out, and I feel like you'd be better off taking advantage of the rear cameras instead. The very nature of foldables, and the fact you can use the cover display as a viewfinder, means that's a very real option for you.</p><p>If anyone is interested in how I got my tomatoes looking so nice after the immense <a href="https://www.tomsguide.com/home/how-to-protect-your-lawn-from-the-next-heatwave-3-drought-proofing-steps-pros-swear-by">heat and drought we've been having in the U.K.</a>, <a href="https://www.tomsguide.com/how-to/7-surprising-ways-you-can-reuse-old-coffee-grounds">the answer is coffee grounds</a>. Those leftovers mean I haven't had to feed my tomato plant all summer. Sadly, the same can't be said for my pepper plant, which hasn't even flowered yet.</p><h2 id="the-ai-isn-t-ready-this-soon">The AI isn't ready this soon</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6bUozneavx3TWuWo7Ff7Um" name="PXL_20260723_153421125" alt="samsung galaxy z fold 8 ultra sample photos" src="https://cdn.mos.cms.futurecdn.net/6bUozneavx3TWuWo7Ff7Um.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>As much as Samsung (and other phone companies) love to hype up AI capabilities, you can't really take full advantage of them on day one. The fact that Galaxy AI already has information on me, transferred over from my Galaxy S26 Ultra, meant that they weren't completely useless. So Now Brief had some basic information from places like my calendar to get me started.</p><p>However, I did need to go through a bunch of setup processes, like updating Samsung's Personal Data Intelligence and creating my own custom cards, to start making the most of the feature. On a similar note, the fact that Now Nudge hadn't had time to burrow into the depths of my phone hasn't been able to surface any useful information so far.</p><p>I have attempted to utilize MyFanCam, which lets you edit videos in a way that focuses on a single subject rather than an entire group. </p><p>I had hoped I would be able to use the feature to video my dogs playing, and help keep the focus on one of the two, instead of having to try and keep their crazy antics in frame all the time. But apparently the AI that powers MyFanCam doesn't recognize dogs, only people. Stay tuned for more.</p><h2 id="what-a-difference-a-day-makes">What a difference a day makes</h2><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="qZ3hFwNMPAjdkh9oaNX6Ym" name="PXL_20260723_153709681" alt="samsung galaxy z fold 8 ultra sample photos" src="https://cdn.mos.cms.futurecdn.net/qZ3hFwNMPAjdkh9oaNX6Ym.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>24 hours is not a lot of time when it comes to getting to grips with a new phone, especially when there are AI features that need time and resources to get themselves working at anything close to operating capacity. Still, it's a good amount of time to start getting to grips with a new device, and for all its potential flaws I am rather happy with the Galaxy Z Fold 8 Ultra so far.</p><p>I am not a huge fan of the narrow cover display, and feel like the wider Z Fold 8 might offer a better experience in that regard. I do like the main 8-inch display, though, especially since it makes viewing and scrolling a more comfortable experience than you'd normally get. Though I would have liked the option to use an S Pen, and hope Samsung brings it back sooner rather than later.</p><p>Of course, there's still plenty of testing that needs doing before we can publish our full review. While I hope this shapes up to be one of the best foldable phones, 24 hours just isn't enough to make that happen. That means it's time to get testing and see what this phone can really do.</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-ditched-my-iphone-for-the-z-fold-8-android-17s-new-migration-tool-is-pure-magic-but-there-is-one-painful-catch">I just ditched my iPhone for the Z Fold 8 — Android 17’s new migration tool is pure magic, but there is one painful catch</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview">‘We're pretty confident': How Samsung plans to fight the first foldable iPhone</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/id-buy-a-galaxy-z-fold-8-over-the-z-fold-8-ultra-and-its-all-because-it-steals-this-z-trifold-feature">I'd buy a Galaxy Z Fold 8 over the Z Fold 8 Ultra — and it's all because it steals this Z TriFold feature</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Galaxy Z Fold 8 interview: Samsung on silicon carbon batteries, the (possible) S Pen return and the iPhone Ultra threat ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview</link>
                                                                            <description>
                            <![CDATA[ I spoke with Samsung executive vice president Jay Kim about the launch of the Galaxy Z Fold 8, Fold 8 Ultra and Flip 8, including why they’re introducing a brand new design and how the company plans to take on Apple. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">dVkMNoBRdgV9YAfCQTpHLh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/nSUkoFkw2KtckkfuUAgNEL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 15:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 23 Jul 2026 17:15:09 +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.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/nSUkoFkw2KtckkfuUAgNEL-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Mark Spoonauer interviews Samsung&#039;s Jay Kim about the launch of the Galaxy Z Fold 8, Fold 8 Ultra and Flip 8 for Tom&#039;s Guide]]></media:description>                                                            <media:text><![CDATA[Mark Spoonauer interviews Samsung&#039;s Jay Kim about the launch of the Galaxy Z Fold 8, Fold 8 Ultra and Flip 8 for Tom&#039;s Guide]]></media:text>
                                <media:title type="plain"><![CDATA[Mark Spoonauer interviews Samsung&#039;s Jay Kim about the launch of the Galaxy Z Fold 8, Fold 8 Ultra and Flip 8 for Tom&#039;s Guide]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/nSUkoFkw2KtckkfuUAgNEL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>By all accounts Samsung should be nervous. After literally inventing the foldable phone 7 years ago and steadily evolving the category, it looks like Apple is going to try to swoop in and steal its thunder this fall with the launch of the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone"><u>iPhone Ultra</u></a> (aka iPhone Fold).</p><p>But if you ask Samsung’s Jay Kim — the executive vice president overseeing the new Galaxy Z Fold 8 series launch — about this imminent threat, he exudes a quiet confidence.</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/azQSspXAvxY" allowfullscreen></iframe></div></div><p>“If our big market player is coming into the market… then it proves that what I have been thinking and envisioning — and how much effort that we put it in — is actually the right direction,” Kim said. </p><p>Samsung is so bullish that it’s broadening its portfolio to three foldable phones this year: the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review"><u>Galaxy Z Fold 8 Ultra</u></a>, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review"><u>Galaxy Z Flip 8</u></a> and the brand new <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review"><u>Galaxy Z Fold 8</u></a>, complete with a squat and wide design that looks a lot like what Apple is reportedly cooking up.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XQhmt5k5QE2M4Q56RCVwUL" name="Jay-Kim-interview-Mark-3" alt="Mark Spoonauer interviews Samsung's Jay Kim about the launch of the Galaxy Z Fold 8, Fold 8 Ultra and Flip 8 for Tom's Guide" src="https://cdn.mos.cms.futurecdn.net/XQhmt5k5QE2M4Q56RCVwUL.jpg" mos="" align="middle" fullscreen="" width="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>Ahead of Samsung Galaxy Unpacked I sat down with Kim alongside Lance Ulanoff at TechRadar for a wide-ranging interview on the new foldable lineup, the upcoming competition, and what it’s going to take for this category to “succeed.”</p><h2 id="galaxy-z-fold-8-why-go-wide">Galaxy Z Fold 8: Why Go Wide?</h2><p>The regular Fold 8 is easily the most intriguing new Samsung device because it’s the first time the company has launched a wide form factor. </p><p>The Galaxy Z Fold 8 features a 5.5-inch cover display with a 10:16 aspect ratio and a 7.6-inch inner screen with a 4:3 ratio. And there’s a reason for going wide: it’s how people prefer to view content.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3608px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="GSPdvof24GQuZ8tTqSeV7X" name="Galaxy Z Fold 8-12" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/GSPdvof24GQuZ8tTqSeV7X.jpg" mos="" align="middle" fullscreen="" width="3608" height="2029" attribution="" endorsement="" class="inline"></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 we looked at our consumer insights on how people react to the products, almost 50% are focused on media, whether on the outside or the inside main screen,” said Kim.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3261px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="qA5XArRRqG3PioTebFtnTW" name="Galaxy Z Fold 8-32" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/qA5XArRRqG3PioTebFtnTW.jpg" mos="" align="middle" fullscreen="" width="3261" height="1834" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Typing on the external display of the Fold 8 is way more comfortable versus the narrower Z Fold 8 Ultra, and when watching videos on the main screen the black bars above and below the panel are much smaller than before.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2936px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="wu79gVE3Bzue9Efqdk47fW" name="Galaxy Z Fold 8-39" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/wu79gVE3Bzue9Efqdk47fW.jpg" mos="" align="middle" fullscreen="" width="2936" height="1651" attribution="" endorsement="" class="inline"></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 other factor for Kim and the rest of the team was pocketability. So they sought to create a Goldilocks phone that combines the multitasking chops of the previous Folds with the compact design of the Flip. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nSUkoFkw2KtckkfuUAgNEL" name="Jay-Kim-interview-1" alt="Mark Spoonauer interviews Samsung's Jay Kim about the launch of the Galaxy Z Fold 8, Fold 8 Ultra and Flip 8 for Tom's Guide" src="https://cdn.mos.cms.futurecdn.net/nSUkoFkw2KtckkfuUAgNEL.jpg" mos="" align="middle" fullscreen="" width="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 Flip is sleek, thin and light, and our customers want both sides of that world. So we said why not?” Kim said.</p><p>The result is a phone that’s the lightest Fold yet at just 201 grams and in a shape that’s nearly identical to a passport.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3375px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="eionbEJ9292YsUMfnqnjjW" name="Galaxy Z Fold 8-22" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/eionbEJ9292YsUMfnqnjjW.jpg" mos="" align="middle" fullscreen="" width="3375" height="1898" attribution="" endorsement="" class="inline"></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 studied it a lot,” Kim shared. “We put together the form factor where media makes the most sense for the content native without compromising anything on the bar type [phone experience].”</p><h2 id="galaxy-z-fold-8-vs-z-fold-8-ultra-who-should-get-what">Galaxy Z Fold 8 vs Z Fold 8 Ultra: Who should get what?</h2><p>Despite its name, the Galaxy Z Fold 8 is not a direct successor to the Galaxy Z Fold 7. It’s a completely new model. The sequel is actually the Z Fold 8 Ultra, which compelled me to ask why Samsung settled on this naming scheme and whether it could confuse shoppers.</p><div><blockquote><p>"Going with titanium was not just to make it thinner,” Kim said. “it actually helps you be durable and stable in the way you fold and unfold."</p></blockquote></div><p>“The Ultra is the highest, most premium, most advanced product,” Kim said. “We see a lot of Ultra consumers coming over to the Fold, asking for similar performance and cameras, so we put a lot of effort to match that capability.”</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2772px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="sG4D9mpBszMGgWBxFvE29W" name="Galaxy Z Fold 8-38" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/sG4D9mpBszMGgWBxFvE29W.jpg" mos="" align="middle" fullscreen="" width="2772" height="1559" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>So why not call the Z Fold 8 the Fold Wide as was rumored? For Kim, Samsung wasn’t trying to create something new, but the new baseline standard for the Fold experience. “I think this is more of the essence of the Fold,” Kim said while pointing to the Fold 8.</p><p>With its bigger 8-inch display, bigger battery and triple-camera setup, the Fold 8 Ultra is more for productivity while the regular Fold 8 (wider displays, dual cameras) is more for content consumption.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PygTGJpVstH2NcZKZz3uVL" name="Jay-Kim-interview-Mark-4" alt="Mark Spoonauer interviews Samsung's Jay Kim about the launch of the Galaxy Z Fold 8, Fold 8 Ultra and Flip 8 for Tom's Guide" src="https://cdn.mos.cms.futurecdn.net/PygTGJpVstH2NcZKZz3uVL.jpg" mos="" align="middle" fullscreen="" width="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 Z Fold 8 Ultra also gets some pretty major upgrades, including a new 50MP wide camera, an even thinner design (4.1 mm) that’s easier to open and a display that has virtually no crease, thanks in large part to the addition of Flex Titanium technology.</p><p>“Going with titanium was not just to make it thinner,” Kim said. “it actually helps you be durable and stable in the way you fold and unfold, so it's a combination of a lot of things coming together.”</p><h2 id="is-the-s-pen-coming-back">Is the S Pen coming back?</h2><p>The last Samsung foldable to feature the S Pen was the Galaxy Z Fold 6, but the company removed the digitizer in order to achieve a thinner design. It’s not coming back for the Fold 8 either, but Samsung isn’t closing the door on this feature.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9fC5bdQsx8w6X8ygkaXpaU" name="Galaxy Z Fold 6 and S Pen-8.jpg" alt="Samsung Galaxy Z Fold 6 and S Pen" src="https://cdn.mos.cms.futurecdn.net/9fC5bdQsx8w6X8ygkaXpaU.jpg" mos="" align="middle" fullscreen="" width="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>When asked if Samsung would consider bringing back the S Pen, even if it means going from 4.1mm thick to 4.2mm, Kim said “we’ll definitely consider your suggestion.”</p><p>“In order to focus on S Pen we have to make trade-offs. In order to put in (a digitizer) you have to sacrifice thinness or different aspects. But I think we wanted to address the most important feedback we got from the market.”</p><p>Since this interview we have heard from another Samsung executive that confirmed that the company is <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"><u>open to bringing back the S Pen</u></a>. </p><h2 id="the-cautious-jump-to-silicon-carbon-batteries">The (cautious) jump to silicon carbon batteries </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dMNhWVVdEx4Fk8ABZieXAg" name="Galaxy Z Fold 8 Ultra-32" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dMNhWVVdEx4Fk8ABZieXAg.jpg" mos="" align="middle" fullscreen="" width="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 Chinese phone makers have been pushing out devices with ultra-high capacity silicon carbon batteries for well over a year, Samsung has been sitting on the sidelines. And that’s understandable given the safety concerns around embracing any new battery technology.</p><p>With its new foldable lineup, however, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-is-the-first-galaxy-phone-with-a-silicon-carbon-battery-heres-why-thats-such-a-big-deal"><u>Galaxy Z Fold 8 Ultra and Galaxy Z Fold 8 make the jump to silicon carbon</u></a>, delivering more capacity while keeping the designs super slim.</p><div><blockquote><p>“We have been testing silicon batteries for quite some time. We’re looking at being very — I wouldn’t say conservative — but more taking it one step at a time.”</p></blockquote></div><p>The Galaxy Z Fold 8 Ultra gets a 5,000 mAh silicon carbon battery (up from 4,400 on the Fold 7). And the Galaxy Z Fold 8 has a 4,800 mAh battery. </p><p>While silicon carbon does enable much higher capacity batteries, there have been some concerns around battery swelling and shorter overall lifecycles.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="A8hW63FkURmJ44BuJwpF7g" name="Galaxy Z Fold 8 Ultra-23" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/A8hW63FkURmJ44BuJwpF7g.jpg" mos="" align="middle" fullscreen="" width="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>“We have been testing the silicon batteries for quite some time,” Kim admitted. “We’re looking at being very — I wouldn’t say conservative — but more taking it one step at a time.”</p><p>The reason why Samsung is embracing silicon battery tech for foldables first is because you can’t simply put in a larger Li-ion battery, as it would balloon the designs.</p><p>“We’re doing a lot of testing and experimentation into how you make the product thin and light, and yet not push too much into the experimental stage,” Kim said.” “We have to be very confident that it’s durable and stable, and it has to be scalable.”</p><h2 id="the-apple-foldable-threat">The Apple foldable threat</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="68k2f3fRXG384SQqZMTjHM" name="iPhone Fold render3" alt="iPhone Fold render" src="https://cdn.mos.cms.futurecdn.net/68k2f3fRXG384SQqZMTjHM.jpg" mos="" align="middle" fullscreen="" width="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 is famously late to lots of categories, and it looks like we’ll be able to add foldable phones to that list later this year.</p><p>And even though this will be Apple’s very first stab at a foldable, they’ve had the luxury of studying the market for years and biding their time to introduce something they believe shoppers will want.</p><div><blockquote><p>"It’s hard to comment because I don’t know what (Apple is) coming up with, but I’m very confident that our product will be one that consumers will appreciate."</p></blockquote></div><p>Analysts seem pretty high on Apple’s chances, with IDC predicting 22% worldwide market share in the first year and Counterpoint research projecting a whopping <a href="https://www.tomsguide.com/phones/iphones/apple-is-predicted-to-own-nearly-half-the-foldable-market-but-i-have-doubts-that-the-iphone-fold-can-help-achieve-it-heres-why"><u>48% share in North America</u></a>. So I asked Kim about these numbers and what he thinks about the arrival of the iPhone Fold/Ultra.</p><p>“It’s hard to comment because I don’t know what they’re coming up with,” Kim said, “but I’m very confident that our product will be one that consumers will appreciate.”</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jdgj4DaDXyxg8nWLBrN5fZ" name="Samsung Galaxy Z Flip 8 hands-on" alt="Samsung Galaxy Z Flip 8 hands-on." src="https://cdn.mos.cms.futurecdn.net/jdgj4DaDXyxg8nWLBrN5fZ.jpg" mos="" align="middle" fullscreen="" width="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>Of course, Samsung itself has been studying foldables for a long time, and they have a lot of market data. “Our consumers are already using the product every day in the market,” Kim emphasized.</p><p>Kim also noted that 30% of consumers are “coming back to foldables.” So it could be someone who owned a foldable, then went to an S Series device, and then has returned to a Fold or Flip because the devices keep getting better.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2797px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="jDQR6ZY2cx8T5NxgCddxW" name="Samsung Galaxy Z 8 lineup" alt="Samsung Galaxy Z 8 lineup." src="https://cdn.mos.cms.futurecdn.net/jDQR6ZY2cx8T5NxgCddxW.jpg" mos="" align="middle" fullscreen="" width="2797" height="1573" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Kim was also keen to subtly point out that Apple will likely only have a single foldable phone this fall while Samsung offers more choice.</p><p>“The market is actually moving pretty fast, and there's a lot of different needs, and we're trying to adapt to that,” Kim said. “Consumers should not be adopting a single size. We should be providing options.”</p><h2 id="when-will-foldables-truly-be-successful">When will foldables truly be ‘successful’?</h2><p>As we wound down our conversation with Jay Kim, my colleague Lance asked a pretty poignant question: “When do you consider the foldable category a success?”</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xz5V8oBoW4g24PzQRgTkFS" name="Jay-Kim-interview-3" alt="Mark Spoonauer interviews Samsung's Jay Kim about the launch of the Galaxy Z Fold 8, Fold 8 Ultra and Flip 8 for Tom's Guide" src="https://cdn.mos.cms.futurecdn.net/xz5V8oBoW4g24PzQRgTkFS.jpg" mos="" align="middle" fullscreen="" width="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>But instead of just launching into his answer, Kim turned the question on us. “Do we see [foldables] as a success?”</p><p>Lance said yes from an engineering standpoint but not from a marketing one because foldables are still a tiny slice of the overall market (about 4%).</p><p>I said I saw things as a dichotomy. People who have purchased devices like the Galaxy Z Fold 7 would call the category a success because they can enjoy the foldable experience without the usual penalties like a bulky design. But I also said success could look like 10% of the market, so 1 out of every 10 phones sold overall.</p><p>Kim told us that we could be “on the verge of foldables going mainstream” And it has a lot to do with Samsung making a bet on a totally new model in the Galaxy Z Fold 8.</p><p>“We’ve had these two form factors for a long time, Kim said. “Introducing another one is a bold move because it shows that we’re pretty confident in the category and how the market is going to react to it. I’m more excited about what’s to come.”</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Galaxy Z Fold 8 Ultra doesn't have a crease-free display — but it's the closest Samsung has ever got to one ]]></title>
                                                                                                                                                                                                <link>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</link>
                                                                            <description>
                            <![CDATA[ Samsung has made a huge amount of progress hiding the display crease, but it's not completely gone. Here's how it compares to the Z Fold 7. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">yictMPD5s2Cmws4jCbPWXi</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TMxTujefvrU4ViKmUpsbUf-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 12:27:49 +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.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/TMxTujefvrU4ViKmUpsbUf-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8 Ultra shown in hand]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8 Ultra shown in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8 Ultra shown in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TMxTujefvrU4ViKmUpsbUf-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Foldable phone makers have declared war on the display crease, and this year could be the year a bunch of them make real progress. Samsung, in particular, has been slowly reducing the visibility of the crease over the past few years, but the recent <a href="https://www.tomsguide.com/news/live/samsung-galaxy-unpacked-2026-live">launch of the Galaxy Z 8 series</a> marks the most significant reduction to date.</p><p>Rumors suggested that Samsung had managed to eliminate the crease, but I can promise you that this isn't the case based on my experience with the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Galaxy Z Fold 8 Ultra </a>over the past day. Samsung has made a lot of progress in making the crease less visible, but it hasn't managed to hide it from view completely.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ULUXv4kHnTVmDbGwRN9NB4.jpg" alt="samsung galaxy z fold 8 side by side with z fold 7 to show of display creases" /><figcaption>Left: Z Fold 7 | Right: Z Fold 8 Ultra<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/MQkbeXqvtqBcXLFh5FTd94.jpg" alt="samsung galaxy z fold 8 side by side with z fold 7 to show of display creases" /><figcaption>Z Fold 8 Ultra<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iQKeyc8GYEefnzK5FAa2B4.jpg" alt="samsung galaxy z fold 8 side by side with z fold 7 to show of display creases" /><figcaption>Z Fold 7<small role="credit">Future</small></figcaption></figure></figure><p>I should make it very clear from the get-go that the crease on the Z Fold 8 Ultra is rather difficult to see at a glance. Especially when you compare it to the<a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"> Galaxy Z Fold 7,</a> which, despite its <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-7-can-survive-half-a-million-folds-according-to-independent-testing-and-thats-a-massive-upgrade">own screen refinements</a>, still has a rather prominent crease down the middle of its foldable screen.</p><p>That being said, the visibility of the crease all depends on what the phone is doing and what the lighting conditions are like. For instance, having the screen switched on makes the crease a lot harder to notice than when it's switched off. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4hYjjRJtsZ2rBPAVeuSTB4" name="PXL_20260723_105144060" alt="samsung galaxy z fold 8 side by side with z fold 7 to show of display creases" src="https://cdn.mos.cms.futurecdn.net/4hYjjRJtsZ2rBPAVeuSTB4.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>Bright, direct light is the worst offender for this. Which means that even though the Z Fold 8 Ultra has a new anti-reflective coating and a 3,000-nit display to aid performance in bright conditions, there's no hiding the prominent dip and warp running down the center of the screen. </p><p>That said, switch your location to a spot without bright and direct light, and the crease practically vanishes before your eyes. So long as the screen is switched on, that is.</p><p>Similarly, bright environments really highlight the warping around the center of the phone. However, it's not even close to as bad as the warping visible on the Z Fold 7. That level of warping is enough to visibly ruin whatever is on your screen, and is particularly pronounced in bright environments.</p><p>Tilting the screen around ruins the illusion too, but as long as you're avoiding direct light, it's still a bit of a struggle to see the crease on the Fold 8 Ultra. </p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/v4Kw7LWejpsKsWnk8EWa94.jpg" alt="samsung galaxy z fold 8 side by side with z fold 7 to show of display creases" /><figcaption>Left: Z Fold 8 Ultra | Right: Z Fold 7<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/uRSstPhLxs7AGDTSJBtHB4.jpg" alt="samsung galaxy z fold 8 side by side with z fold 7 to show of display creases" /><figcaption>Left: Z Fold 8 Ultra | Right: Z Fold 7<small role="credit">Future</small></figcaption></figure></figure><p>Looking at the Z Fold 8 Ultra is only one part of the equation when it comes to the crease, though. Samsung doesn't seem to have made any headway in reducing the way the crease feels when you slide over it with your finger. </p><p>There's a noticeable bump, followed by a dip and another bump. It's not subtle, and the feeling is almost identical to that of the Galaxy Z Fold 7. That suggests to me that the hinge design hasn't changed since last year, and the <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 doesn't seem to be doing much, if anything, to cushion everything underneath the display panel.</p><figure class="inline-layout"><fw-embed-feed channel="toms_guide" playlist="5bJZYl" mode="row" player_placement="bottom-right"></fw-embed-feed></figure><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XbDPDW"></div>                            </div>                            <script src="https://kwizly.com/embed/XbDPDW.js" async></script><p>How this affects you is going to depend on how you use your Z Fold 8 or 8 Ultra. I've been using the larger screen in landscape mode, with the crease running from left to right, and that naturally means my thumb rolls over the crease quite a lot. Obviously, if I held the phone the other way, with the crease running from top to bottom, things would be totally different.</p><p>Obviously this is something prospective Galaxy Z Fold 8 owners need to be aware of. Just because Samsung has reduced the visibility of the Z Fold 8's crease by a considerable amount, it doesn't mean that you won't notice it. Whether that's because you're in a bright environment, or because you can't stop sliding over it while doing basic, everyday things on the larger screen.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/M5GcApuxCHZTWsqw6YCAC4.jpg" alt="samsung galaxy z fold 8 side by side with z fold 7 to show of display creases" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/DaoR8ut657H85m2DZXpPA4.jpg" alt="samsung galaxy z fold 8 side by side with z fold 7 to show of display creases" /><figcaption>Left: Z Fold 7 | Right: Z Fold 8 Ultra<small role="credit">Future</small></figcaption></figure></figure><p>Still, credit where credit is due, Samsung has done a lot to improve the look of the Galaxy Z Fold 8 Ultra's display. Though now the real question is how it will compare to the upcoming foldable <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Ultra</a>. </p><p>After all, Apple has reportedly been especially particular about the crease to the point where it <a href="https://www.tomsguide.com/phones/iphone-flip-tipped-to-eliminate-the-biggest-design-flaw-with-foldable-phones-heres-how">apparently delayed the phone until it could be eliminated</a>. But we'll have to wait until mid-to-late September to find out for sure.</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-z-fold-8-is-the-first-galaxy-phone-with-a-silicon-carbon-battery-heres-why-thats-such-a-big-deal">Samsung Galaxy Z Fold 8 is the first Galaxy phone with a silicon carbon battery — here's why that's such a big deal</a></li><li><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">No, the Fold 8 doesn't have an S Pen — but Samsung is ‘exploring’ its return for future Folds</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-held-samsungs-secret-canceled-z-fold-8-prototypes-and-they-killed-the-best-one">I held Samsung’s secret, canceled Z Fold 8 prototypes — and they killed the best one</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I'd buy a Galaxy Z Fold 8 over the Z Fold 8 Ultra — and it's all because it steals this Z TriFold feature ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/id-buy-a-galaxy-z-fold-8-over-the-z-fold-8-ultra-and-its-all-because-it-steals-this-z-trifold-feature</link>
                                                                            <description>
                            <![CDATA[ Thanks to its wider aspect ratio, you get three-app side-by-side multitasking with the Galaxy Z Fold 8, which it steals from the TriFold. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CBohDSNztu3D59Lz6JtXYE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ic937BdgqQSEM7V9XYxjGX-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 12: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.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/ic937BdgqQSEM7V9XYxjGX-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8 shown in hand]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8 shown in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8 shown in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ic937BdgqQSEM7V9XYxjGX-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I got to see all of Samsung’s new foldable phones, but only one emerged as my favorite. That title belongs to the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Galaxy Z Fold 8</a>, mainly due to how its wider design gives it an aspect ratio similar to an iPad mini, making it more suitable for watching videos.</p><p>But that’s not the main reason why I favor it. Instead, it’s how it steals the most unique feature of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-trifold-review">Galaxy Z TriFold</a>: its three-app side-by-side multitasking. While the more expensive <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Galaxy Z Fold 8 Ultra</a> can run up to four apps simultaneously, the Z Fold 8 has the inherent advantage here because of how it lays them 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="unmatched-productivity">Unmatched productivity</h2><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.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>I’m much more demanding of my phone, so it’s no surprise why I prefer foldable phones like the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a> that I’ve been using as my daily driver for the past couple of months. Unlike typical slab phones, notebook-style foldables are much better suited for running several apps simultaneously.</p><p>But what makes the Galaxy Z Fold 8 superior is how it adopts the side-by-side multitasking of the Galaxy Z TriFold. I’m specifically referring to how it can run three apps in their own windows, all at the same time — which it can do thanks to its 7.6-inch main display.</p><div class="instagram-embed"><blockquote class="instagram-media"  data-instgrm-version="6" style="width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><p><a href="https://www.instagram.com/p/DbGMkCcRN-M/" target="_blank">A post shared by John Velasco (@john_c_velasco)</a></p><p>A photo posted by  on </p></blockquote></div><p>Unlike the Galaxy Z Fold 8 Ultra, which has a more square aspect ratio when opened, the Z Fold 8 is more rectangular and can therefore display three apps side-by-side simultaneously. What's great about this layout is that all three windows remain proportionate, with the ability to save them as an app pair shortcut for quick access later. And if you need just one more app, you can launch a fourth in a separate floating window.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kbf4yWwefijLKzGNFcJfUf" name="Galaxy Z Fold 8 Ultra-35" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/kbf4yWwefijLKzGNFcJfUf.jpg" mos="" align="middle" fullscreen="" width="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 tried running three apps on the Galaxy Z Fold 8 Ultra’s 8-inch main display, but it would really only let me run two properly. You can introduce a third app, but it forces the layout to change so that one app remains in full view on one side, while the other two share the remaining half. This isn’t ideal because those two apps get shrunken down to the point where they're almost unusable.</p><h2 id="way-less-dead-space-with-videos">Way less dead space with videos</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/wu79gVE3Bzue9Efqdk47fW.jpg" alt="Galaxy Z Fold 8 shown in hand" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Notebook-style phones benefit from having large main displays, but they often waste that extra real estate whenever I watch videos on them. Since most videos are shot in a 16:9 aspect ratio, playing them on foldables with square aspect ratios results in the video only occupying the middle portion of the screen — leaving large, unused black bars on the top and bottom.</p><p>It’s a real waste, and the Galaxy Z Fold 8 Ultra is no exception. However, there’s much less dead space on the Z Fold 8. As a result, the letterboxing isn't as glaring, making the viewing experience feel more seamless. When I played  the new "<a href="https://www.tomsguide.com/entertainment/movies/marvel-just-dropped-the-latest-avengers-doomsday-trailer-and-the-next-teaser-might-have-leaked-already">Avengers: Doomsday"</a> trailer on both phones, it was pretty evident that the Z Fold 8 simply gives you a larger video player.</p><h2 id="well-worth-the-trade-offs">Well worth the trade-offs</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3833px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xak7ZZSgMSrGM7iLiEfbtW" name="Galaxy Z Fold 8-4" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/xak7ZZSgMSrGM7iLiEfbtW.jpg" mos="" align="middle" fullscreen="" width="3833" height="2156" attribution="" endorsement="" class="inline"></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 to reiterate, three-app side-by-side multitasking that keeps every window the same size is exclusive to the Galaxy Z Fold 8 — you won’t get it on the Z Fold 8 Ultra. But while this feature is helpful, there are still a few trade-offs to consider if you’re deciding between the two.</p><p>With the Z Fold 8, you’re getting a dual-camera setup that lacks a dedicated telephoto lens, as well as a smaller 4,800 mAh battery. However, for $200 less, I think these trade-offs still make the Z Fold 8 the superior choice for most people.</p><p>In fact, it shares plenty of top-tier hardware with the pricier Z Fold 8 Ultra — including the Snapdragon 8 Elite Gen 5 chip, the same amount of RAM, One UI 9 running on Android 17, 45W wired charging, and 20W wireless charging.</p><p>If those aren’t enough reasons to convince you, it’s also much more pocketable. When it’s closed, holding the phone and using its cover screen is much easier. I can reach all four corners with my thumb, whereas reaching the top corners on the Z Fold 8 Ultra is a real stretch. When you’re on the subway with one hand on a rail and the other on your phone, you’ll have an easier time with the Z Fold 8.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xja2yO"></div>                            </div>                            <script src="https://kwizly.com/embed/Xja2yO.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/ai/google-gemini/i-hate-paying-for-calorie-tracking-apps-so-i-had-gemini-analyze-my-food-photos-instead-heres-what-it-found" target="_blank">I hate paying for calorie-tracking apps, so I had Gemini analyze my food photos instead — here’s what it found</a></li><li><a href="https://www.tomsguide.com/ai/i-replaced-my-notebook-with-an-ai-pen-for-a-month-heres-what-happened" target="_blank">I replaced my notebook with an AI pen for a month — here's what happened</a></li><li><a href="https://www.tomsguide.com/ai/i-used-this-ai-note-taker-to-record-my-meetings-for-a-week-and-it-made-my-workdays-more-focused-and-productive" target="_blank">I used this AI note taker to record my meetings for a week — and it made my workdays more focused and productive</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 9 best Samsung Galaxy Z Fold 8 and Fold 8 Ultra cases to protect your new smartphone — from $19 ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/9-best-samsung-galaxy-z-fold-8-and-fold-8-ultra-cases-to-protect-your-new-smartphone-from-usd19</link>
                                                                            <description>
                            <![CDATA[ Samsung's much-anticipated Galaxy Z Fold 8 and Fold 8 Ultra have finally been revealed. Keep them pristine with one of these cases, available from Samsung and a range of third party brands. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">YguDVd6uQAUNGaNoy3VaQf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NamULQZE5qszUkUT6MD83X-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 11:52:46 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Will Salmon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/HpRWP7Mh9ErgRGoTvZBbBJ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Will Salmon is Tom&#039;s Guide&#039;s Collections Editor, curating advice on the best products to spend your money on. Will has been writing about tech and entertainment for almost 20 years, including stints as GamesRadar+&#039;s Streaming Editor, editing comics website Newsarama, and writing for lots and lots of magazines.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NamULQZE5qszUkUT6MD83X-1280-80.jpg">
                                                            <media:credit><![CDATA[Samsung / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of cases for the Samsung Galaxy Fold 8.]]></media:description>                                                            <media:text><![CDATA[A selection of cases for the Samsung Galaxy Fold 8.]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of cases for the Samsung Galaxy Fold 8.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NamULQZE5qszUkUT6MD83X-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung has officially revealed its highly-anticipated new Galaxy Z Fold 8 and Fold 8 Ultra smartphones. These feature-packed devices offer big foldout screens with crystal clear picture quality, housed in lightweight but durable handsets.</p><p>As you might expect for such hyped bits of kit, the Fold 8 and Fold 8 Ultra come with a fairly hefty price tag. Picking up a phone case is essential, then — and the good news is that there are already options available, which you can see below. </p><p>I've included Samsung's official Galaxy Z Fold 8 case, of course, but I've also picked out a selection of some of the best-looking cases from third party brands. There's something for every budget.</p>        <div class="featured_product_block featured_block_hero" data-id="d22d032e-8678-11f1-a6b9-a3f29890a8bc">            <a href="https://www.amazon.com/Hensinple-Compatible-Translucent-Protection-Shockproof/dp/B0H2LS9P6T/" data-model-name="Hensinple case for Galaxy Z Fold 8 Ultra" 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/xcxjQi3pSNRBMAxwVsD9wk.jpg" alt="Hensinple for Samsung Galaxy Z Fold 8 Ultra Case,z Fold 7| Z Fold8 Ultra Case [compatible With Magsafe] Translucent Matte Military Grade Protection Shockproof Rugged Magnetic Phone Cover(black)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Hensinple</div>                                        <div class="featured__title">Hensinple case for Galaxy Z Fold 8 Ultra</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d22d03b0-8678-11f1-ac11-9fb2a544123f">            <a href="https://www.amazon.com/FNTCASE-Samsung-Galaxy-Fold-Ultra/dp/B0GZ2XHVMF/" data-model-name="Fntcase case for Galaxy Z Fold 8 Ultra" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:96.60%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/UbmyWVQkckmdpH4C5qoNPm.jpg" alt="Fntcase for Samsung Galaxy Z Fold 8 Ultra Case: Galaxy Z Fold 7 Case [hinge Protection + Screen Protector] [fit for Magsafe] Military Grade Drop Protective, Translucent Matte Phone Cover - Black"></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 case for Galaxy Z Fold 8 Ultra</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d22d0428-8678-11f1-aacf-677eb828f83a">            <a href="https://www.amazon.com/Spigen-Armor-MagFit-Galaxy-Black/dp/B0GMVFRFYL/" data-model-name="Spigen Slim Armor Pro Magfit case for Galaxy Z Fold 8" 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/oayMnNBmzvBm5cQpDBunpm.jpg" alt="Spigen Slim Armor Pro Magfit for Galaxy Z Fold 8 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 for Galaxy Z Fold 8</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d22d0496-8678-11f1-82dc-a3c08d2e6a05">            <a href="https://www.ringkestore.com/products/galaxy-z-fold-8-case-onyx-flap-magnetic-screen-protectors-2p" data-model-name="Ringke Magnetic case and Screen Protectors for Galaxy Z Fold 8" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:116.28%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/J8uFt5kf7bZPoG8cyEBDZn.jpg" alt="[bundle] Galaxy Z Fold 8 | Onyx Flap Magnetic + Screen Protectors (2p) - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ringke Official Store</div>                                        <div class="featured__title">Ringke Magnetic case and Screen Protectors for Galaxy Z Fold 8</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d22d050e-8678-11f1-896f-7ba3a273eae1">            <a href="https://www.ringkestore.com/products/bundle-galaxy-z-fold-8-fusion-flap-magnetic-cover-display-easy-slide-tempered-glass-2p" data-model-name="Ringke Fusion Magnetic case and Screen Protectors for Galaxy Z Fold 8" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:116.28%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/9onKsGSChRTTfZpqpbhnqn.jpg" alt="[bundle] Galaxy Z Fold 8 | Fusion Flap Magnetic + Screen Protectors (2p)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ringke Official Store</div>                                        <div class="featured__title">Ringke Fusion Magnetic case and Screen Protectors for Galaxy Z Fold 8</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d22d05fe-8678-11f1-b382-1366c6cc9c31">            <a href="https://thinborne.com/collections/galaxy-z-fold-8-ultra-case/products/galaxy-z-fold-8-ultra-case-red" data-model-name="ThinBorne case for Galaxy Z Fold 8 Ultra" 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/TLef97VMzfqqH4tvqQ48BZ.jpg" alt="ThinBorne, ThinBorne case for Galaxy Z Fold8 Ultra"></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 case for Galaxy Z Fold 8 Ultra</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="69e341e4-867c-11f1-abd1-bbc8e9457508">            <a href="https://www.otterbox.com/products/galaxy-z-fold8-defender-series-pro-xt-case?variant=48109838696635" data-model-name="OtterBox Galaxy Z Fold 8 Defender Series 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/BAZGMPw9nCiroXK5LQKtKK.jpg" alt="OtterBox, OtterBox Galaxy Z Fold 8 Defender Series Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>OtterBox</div>                                        <div class="featured__title">OtterBox Galaxy Z Fold 8 Defender Series Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d22d0676-8678-11f1-9713-0b4f4a7cb824">            <a href="https://www.amazon.com/TORRAS-Galaxy-Fold-Ultra-Samsung/dp/B0H2ZKRVPL/" data-model-name="Torras Vegskin for Galaxy Z Fold 8 Ultra Case Leather" 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/vgvYfBVk9Zh2KyZcjADei.jpg" alt="Torras Q3 Vegskin for Galaxy Z Fold 8 Ultra Case Leather, 360 Spin Magnetic Stand, Fit for Magsafe, Hinge Protection, Organic Silicone Leather Resists Stains, Slim Case for Samsung Fold8 Ultra, 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 Vegskin for Galaxy Z Fold 8 Ultra Case Leather</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d22d06e4-8678-11f1-bc76-c35b29b2c395">            <a href="https://www.samsung.com/us/mobile-accessories/phones/galaxy-z-fold8-carbon-magnet-case-black-sku-ef-kf971sbegus/" data-model-name="Samsung Galaxy Z Fold 8 Carbon Magnet 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/JHoeot8yzeM6T27GpDRepb.jpg" alt="Samsung, Samsung Galaxy Z Fold8 Carbon Magnet Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Samsung</div>                                        <div class="featured__title">Samsung Galaxy Z Fold 8 Carbon Magnet Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ T-Mobile is offering a free Galaxy Z Fold 8: how to save up to $1,900 on Samsung's new foldables ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/t-mobile-is-offering-a-free-galaxy-z-fold-8-how-to-save-up-to-usd1-900-on-samsungs-new-foldables</link>
                                                                            <description>
                            <![CDATA[ T-Mobile is offering some of the best Galaxy Z Fold 8 and Galaxy Z Flip 8 preorder deals I've seen. Here's how you can save up to $1,900 ahead of launch. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LXctkSaN9s7tXRFMxhB5i6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4XpU9Fp9xSimdZVUBeEvsF-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 11: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.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&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;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.&amp;nbsp;&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/4XpU9Fp9xSimdZVUBeEvsF-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8 Ultra, Z Fold 8, and Z Flip 8 phones held in hand]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8 Ultra, Z Fold 8, and Z Flip 8 phones held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8 Ultra, Z Fold 8, and Z Flip 8 phones held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/4XpU9Fp9xSimdZVUBeEvsF-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung's Galaxy Z line of foldable phones are among the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> we've tested. They're known for being sturdy, incredibly powerful, and fun to use. Samsung just released its Galaxy Z lineup for 2026 and it consists of the Galaxy Z Fold 8 Ultra for $2,099, Galaxy Z Fold 8 for $1,899, and the Galaxy Z Flip 8 for $1,199. </p><p>Preorder deals are already live and one carrier is taking the lead when it comes to discounts. Right now, you can get the <a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">Galaxy Z Fold 8 for free</a> or <a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">up to $1,100 off the Galaxy Z Fold 8 Ultra</a> at T-Mobile. Alternatively, you can get <a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">up to $1,100 off the Galaxy Z Flip 8</a>. All of these offers require a trade-in and you must also sign up for the carrier's Experience More or Experience Beyond plans. Nevertheless, they're the most aggressive discounts I've seen so far. </p><p>Here's a look at each individual deal and all of Samsung's new phones. For more personal recommendations, make sure to check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> homepage and our <a href="https://www.tomsguide.com/news/ultimate-back-to-school-guide">back to school deals</a> guide. Also make sure to bookmark our <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">Galaxy Z Fold 8 preorder deals</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/best-galaxy-z-flip-8-deals-get-samsungs-new-foldable-for-free">Galaxy Z Flip 8 preorder deals</a> for the latest discounts.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>shop all Samsung deals at T-Mobile</strong></a></li><li><strong>Galaxy Z Fold 8: </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>Galaxy Z Fold 8 Ultra: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>up to $1,900 off w/ trade-in + unlimited</strong></a><strong></strong></li><li><strong>Galaxy Z Flip 8: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>up to $1,100 off w/ trade-in + unlimited</strong></a><strong></strong></li></ul><figure class="inline-layout"><fw-embed-feed channel="toms_guide" playlist="5bJZYl" mode="row" player_placement="bottom-right"></fw-embed-feed></figure><h3 class="article-body__section" id="section-best-galaxy-z-deals"><span>Best Galaxy Z deals</span></h3><div class="product"><a data-dimension112="1a6bfb02-8603-11f1-b50e-15e8e6238708" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 preorder: 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: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.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="1a6bfb02-8603-11f1-b50e-15e8e6238708" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 preorder: 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. The phone features a 7.6-inch AMOLED (1848 x 2448) 120Hz main display, 5.5-inch AMOLED (1248 x 1972) 120Hz cover display, Snapdragon 8 Elite Gen 5 for Galaxy chipset, 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 multitasking is way more suitable on its canvas, with up to four apps running simultaneously.<a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="1a6bfb02-8603-11f1-b50e-15e8e6238708" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="1a6bfb70-8603-11f1-bc61-618752e68108" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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: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.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="1a6bfb70-8603-11f1-bc61-618752e68108" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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. 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 Gen 5 for Galaxy chipset, 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 hands-on</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://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="1a6bfb70-8603-11f1-bc61-618752e68108" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="1a6bfbd4-8603-11f1-90cc-97c9a221308a" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,100 off w/ tarde-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Flip 8: up to $1,100 off w/ tarde-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:1199px;"><p class="vanilla-image-block" style="padding-top:125.10%;"><img id="rTkAPNzBbP77RUVHtMufoZ" name="Galaxy Z Flip 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rTkAPNzBbP77RUVHtMufoZ.jpg" mos="" align="middle" fullscreen="" width="1199" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Flip 8: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="1a6bfbd4-8603-11f1-90cc-97c9a221308a" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,100 off w/ tarde-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Flip 8: up to $1,100 off w/ tarde-in + unlimited @ T-Mobile" data-dimension25=""><strong>up to $1,100 off w/ tarde-in + unlimited @ T-Mobile</strong></a><br>T-Mobile is offering various Galaxy Z Flip 8 deals. You can get the phone for $1,100 off with trade-in and when you add a line on T-Mobile's Experience More or Experience Beyond plans. Or get it for $500 off with trade-in on most other data plans. The flip phone features a 6.9-inch AMOLED (1080 x 2520) inner display w/ 120Hz refresh, 4.1-inch AMOLED (948 x 1048) outer display w/ 120Hz refresh, Snapdragon 8 Elite Gen 5 for Galaxy chipset, 12GB of RAM, and 256GB of storage. You also get 50MP f/1.8 main and 12MP f/2.2 ultra-wide rear cameras and a 10MP f2.2 selfie cam. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review">Galaxy Z Flip 8 hands-on</a>, we said it's Samsung's sleekest and most refined flip phone to date, but not a necessary upgrade for current Z Flip 7 owners.<a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="1a6bfbd4-8603-11f1-90cc-97c9a221308a" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,100 off w/ tarde-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Flip 8: up to $1,100 off w/ tarde-in + unlimited @ 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&rows=6&view_mode=savings_squad&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=${siteParam}&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (!this.activeDealTag && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 40px; min-height: 40px;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 36px; min-height: 36px;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I just ditched my iPhone for the Z Fold 8 — Android 17’s new migration tool is pure magic, but there is one painful catch ]]></title>
                                                                                                                                                                                                <link>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</link>
                                                                            <description>
                            <![CDATA[ I ditched my iPhone of 10 years for the Samsung Galaxy Z Fold 8. Android 17’s new native switch tool is pure magic, but I hit one 514GB storage catch. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jk4sSf2XqheBuDuZcbEFt</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/bnGCtNgfVm5FaNEyibTdqY-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 10:36:13 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/bnGCtNgfVm5FaNEyibTdqY-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Android 17 iOS migration tool]]></media:description>                                                            <media:text><![CDATA[Android 17 iOS migration tool]]></media:text>
                                <media:title type="plain"><![CDATA[Android 17 iOS migration tool]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/bnGCtNgfVm5FaNEyibTdqY-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>For a decade, Apple has essentially held my digital life hostage with iPhones. Every time I looked at an Android phone, the sheer dread of migrating my passwords, WhatsApp chats, and app layouts kept me firmly trapped in the Walled Garden. But with Android 17 on the new <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review">Galaxy Z Fold 8</a>, Google just handed me a pair of bolt cutters.</p><p>Enter Google’s new Android Switch iOS migration tool — named Smart Switch in the newly launched Galaxy Z Fold 8, <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Galaxy Z Fold 8 Ultra</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review">Galaxy Z Flip 8</a>. And all I’ll say is if switching operating systems is a dealbreaker for you — getting all the right apps, account logins and home screen layouts just right — all of that is gone.</p><p>This is a breakthrough for phone switchers, and a real leveler in the iOS vs Android war.</p><figure class="inline-layout"><fw-embed-feed channel="toms_guide" playlist="5bJZYl" mode="row" player_placement="bottom-right"></fw-embed-feed></figure><h2 id="just-scan-and-go">Just scan and go</h2><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="uat8NzYTFwXMac58yd9osY" name="Android 17 iOS migration tool" alt="Android 17 iOS migration tool" src="https://cdn.mos.cms.futurecdn.net/uat8NzYTFwXMac58yd9osY.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>It all starts with a QR code scan — no additional app required. At that point, I picked what apps and data I sent across, and it just…did it. Mostly.</p><p>There is the brutal reality I did face while switching: the software is pure magic, but physics still applies. I was staring down the barrel of a decade's worth of iPhone photos (514GB to be specific), and the Z Fold 8 simply didn't have the storage to swallow it all. </p><p>I had to make the agonizing choice to leave my photo library behind in the Apple ether. But once I made peace with that (and started a mass transfer to Amazon Photos with my Prime account)? What happened next was jaw-dropping.</p><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="VikpkEk9PUNfF4iqZtMNqY" name="Android 17 iOS migration tool" alt="Android 17 iOS migration tool" src="https://cdn.mos.cms.futurecdn.net/VikpkEk9PUNfF4iqZtMNqY.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><div><blockquote><p>The elimination of basically all friction here is amazing to me.</p></blockquote></div><p>Your Android phone will find its OS equivalents of the apps you have on your iPhone and install them all, all your messages, call logs and contacts, WhatsApp data, account logins and passwords, settings and even the way the apps are laid out on each home screen (as well as wallpaper) all make it over.</p><p>The only things you’ll need to do are log back into your apps with the saved details and add the Android equivalent to the widgets, as I saw with these suspicious gaps in my app layouts. </p><p>The elimination of basically all friction here is amazing to me — someone who’s seen both sides make it as awkward as possible for platform lock-in.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="D4SjJtUfCtdf2rEXwMZ5sY" name="Android 17 iOS migration tool" alt="Android 17 iOS migration tool" src="https://cdn.mos.cms.futurecdn.net/D4SjJtUfCtdf2rEXwMZ5sY.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>And even better? It just took me around 25-30 minutes wirelessly. Of course, mileage may vary depending on just how much data you’re sending over, but this was for roughly 55GB of total data. </p><p>Stick another five minutes on top for logging back into everything and setting up my bank card with Samsung Pay, and I was using the London Underground again as if nothing had happened.</p><h2 id="what-s-the-catch">What’s the catch?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9ziYTMeYfvJiwhcom72gqY" name="Android 17 iOS migration tool" alt="Android 17 iOS migration tool" src="https://cdn.mos.cms.futurecdn.net/9ziYTMeYfvJiwhcom72gqY.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>So there is one small frustration that I came across — my first attempt came up with an internet connection problem. Basically, the migration didn’t start because the Android phone wasn’t connected to Wi-Fi. This could be because I was on my hotel’s network, and your home Wi-Fi may behave differently.</p><p>If that happens, just start the process as if you were setting up your Android phone from scratch, connect to Wi-Fi, then head back to the migration screen. That fixed it for me!</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MGUksWn6w4Ak5by2oQDaoY" name="Android 17 iOS migration tool" alt="Android 17 iOS migration tool" src="https://cdn.mos.cms.futurecdn.net/MGUksWn6w4Ak5by2oQDaoY.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>But beyond that, everything else was shockingly smooth on this transition, and surprisingly fast too. In all my years covering phones, I never expected to see iOS and Android playing nice together like this.</p><p>Put simply, the fear of platform lock-in should no longer be part of your purchase decision.</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-z-fold-8-is-the-first-galaxy-phone-with-a-silicon-carbon-battery-heres-why-thats-such-a-big-deal">Samsung Galaxy Z Fold 8 is the first Galaxy phone with a silicon carbon battery — here's why that's such a big deal</a></li><li><a href="https://www.tomsguide.com/ai/samsung-just-added-automated-tasks-and-gemini-notebook-to-galaxy-z-fold-8-heres-what-these-ai-features-let-you-do">Samsung just added Automated Tasks and Gemini Notebook to Galaxy Z Fold 8 — here's what these AI features let you do</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-held-samsungs-secret-canceled-z-fold-8-prototypes-and-they-killed-the-best-one">I held Samsung’s secret, canceled Z Fold 8 prototypes — and they killed the best one</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The new Siri app in iOS 27 is keeping receipts on everything you ask — here’s how to auto-delete your chats ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/the-new-siri-app-in-ios-27-is-keeping-receipts-on-everything-you-ask-heres-how-to-auto-delete-your-chats</link>
                                                                            <description>
                            <![CDATA[ iOS 27 gives Siri a ChatGPT-style makeover, but it saves your history forever by default. If you've updated, you should change this setting. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">gph9PMVrBAE4TFBetk5oCF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/nChN6QF6WoLSu7FdeqPcdX-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/nChN6QF6WoLSu7FdeqPcdX-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Siri logo on phone]]></media:description>                                                            <media:text><![CDATA[Siri logo on phone]]></media:text>
                                <media:title type="plain"><![CDATA[Siri logo on phone]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/nChN6QF6WoLSu7FdeqPcdX-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When I first downloaded the <a href="https://www.tomsguide.com/phones/iphones/how-to-download-ios-27-public-beta">iOS 27 developer beta</a>, I was genuinely impressed by Siri's makeover. It's finally outgrown basic commands, morphing into a full-fledged chatbot and bringing major upgrades across the system.</p><p>Apple even gave Siri its own dedicated app, making it easy to hop back into past threads. And thanks to iCloud syncing, a conversation started on your iPhone sits waiting for you when you open your Mac.</p><p>Then I took a closer look at my history, and reality set in. There, neatly archived and synced across my devices, was a chronological list of my late-night curiosities, messy half-baked thoughts, and text drafts. Apple assumes you want to keep that paper trail forever.</p><p>So, I immediately dived into Settings to see if I could sort it out, and, thankfully, there’s an easy fix. </p><h2 id="why-forever-is-a-problem">Why forever is a problem </h2><p>Under the old rules, Siri was ephemeral: ask a question, get an answer, done. iOS 27 flips that model. By saving everything by default, Apple turns Siri from a quick tool into a permanent digital diary.</p><p>The issue isn't just about someone reading over your shoulder, it's data bloat. Because these chats sync through iCloud across your devices, an indefinite log creates an avoidable footprint. Every health symptom you look up, draft message, and rabbit hole builds into a detailed map of your personal habits sitting in the cloud.</p><p>Convenience is great, but hoarding years of unfiltered search context is an unnecessary privacy liability when an auto-delete setting exists.</p><section class="howto-block">                    <h3>How to set an auto-delete timer for Siri</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/KP5gszNUxuGnwE5XC2YtJc.jpg"                                        alt="How to auto delete Siri conversations"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/KP5gszNUxuGnwE5XC2YtJc.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Reining in Siri's memory only takes a few taps. <strong>Open Settings</strong> on your iPhone, <strong>tap Siri </strong>and<strong> select</strong> <strong>Keep Conversations</strong>. From here you can change the setting from Forever to either 30 Days or 1 Year. </p><p>Once selected, iOS 27 will automatically purge any Siri conversations older than your chosen timeframe. Now you can actually enjoy Siri’s new AI powers without worrying about your past queries coming back to haunt you.</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xr002W"></div>                            </div>                            <script src="https://kwizly.com/embed/Xr002W.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-siri-ai-in-ios-27-for-3-weeks-7-things-to-try-first-and-the-feature-that-won-me-over">I've been testing Siri AI in iOS 27 for 3 weeks: 7 things to try first (and the feature that won me over)</a></li><li><a href="https://www.tomsguide.com/phones/iphones/the-robot-voice-is-gone-how-to-make-siri-sound-truly-human-in-ios-27">iOS 27 now lets you customize Siri's pace and expressivity — here's how to do it</a></li><li><a href="https://www.tomsguide.com/ai/apple-intelligence/9-hidden-siri-commands-you-probably-dont-know-about-and-theyre-actually-useful">9 hidden Siri commands you probably don't know about — and they're actually useful</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I held Samsung’s secret, canceled Z Fold 8 prototypes — and they killed the best one ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/i-held-samsungs-secret-canceled-z-fold-8-prototypes-and-they-killed-the-best-one</link>
                                                                            <description>
                            <![CDATA[ I spoke to Samsung design head Hubert Lee about the Galaxy Z Fold 8's passport shape and tested the scrapped prototypes left on the cutting room floor. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">WHogwYPbRzkTnzNqaxmSNd</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sTwjm7kCjJhCc8oFYZSz5m-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 04:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 23 Jul 2026 06:42:01 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/sTwjm7kCjJhCc8oFYZSz5m-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sTwjm7kCjJhCc8oFYZSz5m-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>So the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Samsung Galaxy Z Fold 8</a> is official, and it’s the next foldable to jump on the passport-sized trend with a shorter, wider form factor that makes it ideal for content consumption.</p><p>I do like it from my time testing it (bar that $1,899 price tag). Some of the ergonomic issues I saw with <a href="https://www.tomsguide.com/phones/iphones/i-just-tested-the-phone-everybody-thinks-is-a-preview-of-the-iphone-fold-god-i-hope-theyre-wrong">Huawei’s stubby foldable</a> have been resolved in software, and having a nicer 4:3 aspect ratio gives your Netflix shows or websites much more screen space to fill than the squarer Z Fold 8 Ultra.</p><p>I had a chance to speak to Samsung’s design team head, Hubert Lee, about the decisions made to get to this form factor, and I got to hold some of the different-sized devices that were left on the cutting room floor. And…well…is this a safe space? Because I think they’ve dropped the ball by not going for something smaller here.</p><h2 id="the-story-of-the-design">The story of the 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:4592px;"><p class="vanilla-image-block" style="padding-top:62.13%;"><img id="NvoNz7r4QZg4mgbVGEuTUX" name="Galaxy Z Fold 8-10" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/NvoNz7r4QZg4mgbVGEuTUX.jpg" mos="" align="middle" fullscreen="" width="4592" height="2853" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>So how did Samsung land on the Z Fold 8? Well, it’s a long story of trying to balance emotional warmth and geometric symmetry — a mission that Lee labels “Emotive Geometry” — alongside 3D printing many different form factors for this new stubbier foldable.</p><p>After much experimentation with over 500 handmade mock-ups to evaluate grip, comfort and usability across different sizes and proportions, it became clear to the team that drawing inspiration from the passport was (in their words) a golden ratio.</p><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="A86qjy3wnqzTu5MECrnR4m" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/A86qjy3wnqzTu5MECrnR4m.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><ul><li>Smaller versions aimed at users with smaller hands were tested, but ultimately scrapped because they felt too similar to the Galaxy Z Flip 8</li><li>Larger versions were also rejected because they were too close to the Z Fold 8 Ultra</li></ul><p>And in the same spirit as Goldilocks trying out different beds and bowls of porridge, the company stumbled on what they believe is “just right.” Its ergonomic dimensions are specifically designed to be held and opened with a single hand, while being compact enough to be pocketable. And in my time using it, I can see how they arrived at that decision. </p><p>Yes, I’m a little disappointed that there’s still black bars with the 4:3 aspect ratio inside display, but you certainly get a lot more content on screen than you would with the productivity-focused <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Z Fold 8 Ultra</a>.</p><p>But as I was shown these mockups, and got to hold them, I was left asking one question: did they make the right decision? I’m really not sure.</p><h2 id="how-small-can-you-go">How small can you go?</h2><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="4mbfAbyYPXhknkjSMyvysk" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/4mbfAbyYPXhknkjSMyvysk.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>I’ll admit this comes from a biased place. I loved my <a href="https://www.tomsguide.com/reviews/iphone-12-mini">iPhone 12 mini</a> and have always adored having smaller smartphones over the gigantic slabs that they’ve all become. So once I started holding these tiny options, my mind was spinning with the possibilities of what could’ve been.</p><p>Because yes, that smallest device is basically a Z Flip 8 turned sideways, but it also meant a 16:9 aspect ratio display inside — no black bezels whatsoever on your content! But if you still really wanted the same aspect ratios as the finished product, you’ve got smaller options that felt amazing in one hand.</p><p>Simply put, there's a lot more room for aspect ratio experimentation if content consumption was the key mission here, and I think Samsung's really missed an opportunity here to do something that breaks new ground.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Pze3QLnSE96RoMfRW8WE5m.jpg" alt="Samsung Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/n8kZboSvuxAk6bpQReLD4m.jpg" alt="Samsung Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Now, I know what one of your many responses will be here. “What about battery life?” As you already know, there’s a 4,800mAh silicon carbon cell inside to maximize the balance between longevity and making this the lightest Galaxy Fold. </p><p>With that technology (and a touch more thickness), it could be argued that you could still find that good balance. We’ve seen standard smartphones go all the way up to 7,000mAh with this new battery tech, so it’s not fantasy to believe the same could happen here.</p><h2 id="take-me-back-to-small-phones">Take me back to small 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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PY9Dr9HgLSZZPXvkKDujuk" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/PY9Dr9HgLSZZPXvkKDujuk.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>I know I may be in a minority here — after all, every time a company tried to make a small phone, they quickly pivoted to big screens (RIP iPhone mini). However, foldables give you the best of both worlds, and while I do appreciate the intentional choice of Samsung here, I feel there was a better golden ratio right in front of them.</p><p>Passport-sized foldables are definitely all the rage right now, as Apple looks set to join this party real soon. But holding these smaller options sent my mind spinning on what could’ve been.</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-card-takes-aim-at-apple-card-with-way-more-perks-and-rewards-heres-what-you-get">Samsung Galaxy Card takes aim at Apple Card with way more perks and rewards — here’s what you get</a></li><li><a href="https://www.tomsguide.com/phones/iphones/forget-iphone-18-pro-iphone-20-tipped-to-get-apples-biggest-screen-upgrade-ever">Forget iPhone 18 Pro — iPhone 20 tipped to get Apple’s biggest screen upgrade ever</a></li><li><a href="https://www.tomsguide.com/phones/android-phones/light-just-announced-a-usd299-flip-phone-to-cure-screen-addiction-and-its-co-founder-convinced-me-to-embrace-being-bored-again">Light just announced a $299 flip phone to cure screen addiction — and its co-founder convinced me to embrace being bored again</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Fold 8 pre-orders — top deals and offers in Australia ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-deals-au</link>
                                                                            <description>
                            <![CDATA[ Samsung's Galaxy Z Fold 8 and Z Fold 8 Ultra are now available for pre-order —here's what Australia's top carriers and retailers are offering in terms of discounts and bonuses. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">BXECZ9chMSPqR8pogE2aQ6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6tFNrkgCW36DH6KbMFoofK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 03:48:56 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Stephen Lambrechts ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/JN3jEQpqyyt32as8AJJqXe.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Stephen Lambrechts is the Managing Editor of Tom&#039;s Guide AU and has written professionally across the categories of tech, film, television and gaming for the last 15 years. Before Tom&#039;s Guide, he spent several years as a Senior Journalist at TechRadar, had a brief stint as Editor in Chief at Official Xbox Magazine Australia, and worked at IGN. He&#039;s also written for such mags and sites as APC, TechLife Australia, T3, FilmInk, Daily Telegraph and AskMen. Additionally, he&#039;s a Tomatometer-approved critic on Rotten Tomatoes, and has offered his tech advice on radio and television.&lt;/p&gt;&lt;p&gt;He&#039;s an expert when it comes to smartphones, TVs, gaming and streaming, having contributed many reviews in each of those categories over the years. Despite his many articles on streaming, he&#039;s a passionate collector of physical media who enjoys listening to vinyl records and acquiring obscure horror movies from the &#039;60s, &#039;70s and 80s. He can usually be seen rocking the latest retro sneaker releases, particularly Air Jordans and Reebok Pumps. Occasionally, he also indulges in other non-hipster stuff, like hiking.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/6tFNrkgCW36DH6KbMFoofK-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / Stephen Lambrechts]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 and Z Fold 8 Ultra side by side on table with Killer Deals badge overlaid]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 and Z Fold 8 Ultra side by side on table with Killer Deals badge overlaid]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 and Z Fold 8 Ultra side by side on table with Killer Deals badge overlaid]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6tFNrkgCW36DH6KbMFoofK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>After months of rumours and speculation, Samsung's new Galaxy Z Fold 8 lineup has been officially unveiled at the latest Galaxy Unpacked event, which means Galaxy Z Fold 8 pre-orders are officially open. </p><p>Arguably the biggest reveal is the new <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Galaxy Z Fold 8</a>, which adopts a shorter, wider, passport‑like shape with a 5.5‑inch cover screen and a 7.6‑inch main display, while the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Galaxy Z Fold 8 Ultra</a> keeps the taller, classic layout with a 6.5‑inch cover screen and an 8‑inch main display.</p><p>But that's not all this year: the Galaxy Z Fold 8 and the Z Fold 8 Ultra boast Samsung's new Flex Titanium display, which adds a flexible titanium‑alloy film under the foldable OLED panel to increase durability and significantly reduce the crease on both devices.</p><p>Maybe the biggest change is Samsung finally adopting silicon‑carbon batteries for both the Galaxy Z Fold 8 and Z Fold 8 Ultra, which raises capacity from last year’s 4,400mAh in the Z Fold 7 to 5,000mAh in the Z Fold 8 Ultra and 4,800mAh in the smaller Z Fold 8. It also brings about faster charging, going from 25W (wired) and 15W (wireless) on the Z Fold 7, to 45W (wired) and 20W (wireless) on the Z Fold 8 range.</p><p>Samsung's Galaxy Z Fold 8 and Z Fold 8 Ultra are set to release on August 14, 2026, with pre-orders ending at 11:59pm AEST the night before. As always, Australia's top retailers and telcos are offering bonuses to those who purchase one of the new devices ahead of release date, with discounts and free storage upgrades up for grabs. To make things easier for you, we've compiled all the best Samsung Galaxy Z Fold 8 pre-order deals and offers below.</p><p>For more ways to save, check out our guide to today's best <a href="https://www.tomsguide.com/au/coupons/samsung.com">Samsung promo codes</a>.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-offers"><span>Samsung Galaxy Z Fold 8 offers</span></h3><p>If you plan to buy a Galaxy Z Fold 8 or Z Fold 8 Ultra outright, Samsung and Amazon Australia offer the strongest pre-order value. Samsung lets you layer several savings together: an Eco-Voucher worth up to AU$150 off when you bundle with other Samsung ecosystem devices and accessories (using code <strong>UNFOLD2026 </strong>and within the first 72 hours, which then drops down to AU$50 for the rest of the pre-order period), AU$150 back when paying via PayPal, a AU$200 price drop on 1TB models with code <strong>TR-FOLD8</strong>, and up to AU$150 in extra trade-in credit. Amazon keeps it simple for those buying outright by bundling a AU$300 Amazon digital gift card with Galaxy Z Fold 8 pre-orders. JB Hi-Fi also appeals to outright buyers with a AU$300 store gift card.</p><p>For those who prefer paying off the phone over time, the major mobile carriers are cutting hundreds off handset costs on repayment plans. Optus offers a flat AU$750 off any model paired with AU$15p/m SIM plan savings, while Vodafone drops AU$700 off the device price, matches the $300 trade-in credit, and offers steep discounts on bundled Galaxy Watch products. You can find out more about Galaxy Z Fold 8 pre-order offers below.</p><div class="product"><a data-dimension112="18ae8f12-84cf-11f1-82fd-83f479b2f616" data-action="Deal Block" data-label="Samsung: AU$200 off for 1TB upgrade, AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" data-dimension48="Samsung: AU$200 off for 1TB upgrade, AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" href="https://www.samsung.com/au/smartphones/galaxy-z-fold8/buy/" target="_blank" rel="sponsored"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="g2Lu9U9HTxMfgS4ck3uDBd" name="Samsung-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/g2Lu9U9HTxMfgS4ck3uDBd.jpg" mos="" align="middle" fullscreen="" width="4000" height="4000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Samsung: </strong><a href="https://www.samsung.com/au/smartphones/galaxy-z-fold8/buy/" target="_blank" data-dimension112="18ae8f12-84cf-11f1-82fd-83f479b2f616" data-action="Deal Block" data-label="Samsung: AU$200 off for 1TB upgrade, AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" data-dimension48="Samsung: AU$200 off for 1TB upgrade, AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" data-dimension25=""><strong>AU$200 off for 1TB upgrade, AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit</strong></a></p><p>If you buy straight from Samsung, you can layer a few discounts at checkout. You'll get up to AU$150 off with code <strong>UNFOLD2026</strong> when you bundle the phone with a Samsung ecosystem device until July 25 (which then drops down to AU$50 for the rest of the pre-order period), and an extra AU$150 back if you pay with PayPal. Additionally, you can use the code <strong>TR-FOLD8</strong> to knock AU$200 off 1TB models, and you can get up to AU$150 in bonus trade-in credit. Samsung is also throwing in 3 months of free Samsung Care+ and 10% to 30% off bundled gear like Galaxy Watches and Buds.<a class="view-deal button" href="https://www.samsung.com/au/smartphones/galaxy-z-fold8/buy/" target="_blank" rel="sponsored" data-dimension112="18ae8f12-84cf-11f1-82fd-83f479b2f616" data-action="Deal Block" data-label="Samsung: AU$200 off for 1TB upgrade, AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" data-dimension48="Samsung: AU$200 off for 1TB upgrade, AU$150 off with code + AU$150 cashback with PayPal + bonus trade-in credit" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="18ae8f76-84cf-11f1-8060-8b9b75a29c08" data-action="Deal Block" data-label="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" data-dimension48="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" href="https://www.amazon.com.au/Samsung-Version-Foldable-Multitasking-Storage/dp/B0FDFC3C5P" 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="EaJx7PLL3rAQSY9BEgEGi3" name="Amazon-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EaJx7PLL3rAQSY9BEgEGi3.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Amazon: </strong><a href="https://www.amazon.com.au/Samsung-Version-Foldable-Multitasking-Storage/dp/B0H7X1CQGQ/" target="_blank" data-dimension112="18ae8f76-84cf-11f1-8060-8b9b75a29c08" data-action="Deal Block" data-label="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" data-dimension48="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" data-dimension25=""><strong>Get AU$300 Amazon store credit when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra</strong></a></p><p>Amazon is keeping it simple for outright buyers: every pre-order of the <a href="https://www.amazon.com.au/Samsung-Version-Foldable-Multitasking-Storage/dp/B0H7X1CQGQ/">Galaxy Z Fold 8 </a>or <a href="https://www.amazon.com.au/Samsung-Version-Foldable-Multitasking-Storage/dp/B0H7XDB8ZV/" target="_blank">Galaxy Z Fold 8 Ultra</a> comes with a free AU$300 Amazon store credit. If you trade in an old phone, you can also get an Amazon gift card valued up to AU$800. This offer is available until 11:59pm AEST on August 13, 2026.<a class="view-deal button" href="https://www.amazon.com.au/Samsung-Version-Foldable-Multitasking-Storage/dp/B0FDFC3C5P" target="_blank" rel="nofollow" data-dimension112="18ae8f76-84cf-11f1-8060-8b9b75a29c08" data-action="Deal Block" data-label="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" data-dimension48="Amazon: Get AU$300 Amazon store credit when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="18ae908e-84cf-11f1-8c50-335cd40e3a45" data-action="Deal Block" data-label="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" data-dimension48="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" href="https://www.jbhifi.com.au/pages/samsung-galaxy-unpacked" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="dUMxuvDTBa7Tnj2jRqi8ME" name="JB-Hi-Fi-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dUMxuvDTBa7Tnj2jRqi8ME.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>JB Hi-Fi: </strong><a href="https://www.jbhifi.com.au/pages/samsung-galaxy-unpacked" target="_blank" data-dimension112="18ae908e-84cf-11f1-8c50-335cd40e3a45" data-action="Deal Block" data-label="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" data-dimension48="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" data-dimension25=""><strong>Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra</strong></a></p><p>JB Hi-Fi offers an easy-to-use retail perk by including a AU$300 JB Hi-Fi Gift Card (digital or in-store) with all Z Fold 8 and Z Fold 8 Ultra pre-orders. This makes JB Hi-Fi a decent option for outright buyers, though it's worth noting that Amazon's offer provides just as much value in terms of store credit. This offer is valid until 11:59pm AEST on August 13, 2026.<a class="view-deal button" href="https://www.jbhifi.com.au/pages/samsung-galaxy-unpacked" target="_blank" rel="nofollow" data-dimension112="18ae908e-84cf-11f1-8c50-335cd40e3a45" data-action="Deal Block" data-label="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" data-dimension48="JB Hi-Fi: Get a AU$300 JB Hi-Fi gift card when you pre-order Galaxy Z Fold 8 or Z Fold 8 Ultra" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="18ae8fd0-84cf-11f1-9fce-2d74e41bf1cc" data-action="Deal Block" data-label="Optus: Get a AU$750 discount when you buy any Galaxy Z Fold 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" data-dimension48="Optus: Get a AU$750 discount when you buy any Galaxy Z Fold 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" href="https://www.optus.com.au/mobile/phones/samsung/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:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="YwvBBB6x3H2wXEEEevoNYC" name="Optus-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YwvBBB6x3H2wXEEEevoNYC.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Optus: </strong><a href="https://www.optus.com.au/mobile/phones/samsung/galaxy-z-fold8" target="_blank" data-dimension112="18ae8fd0-84cf-11f1-9fce-2d74e41bf1cc" data-action="Deal Block" data-label="Optus: Get a AU$750 discount when you buy any Galaxy Z Fold 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" data-dimension48="Optus: Get a AU$750 discount when you buy any Galaxy Z Fold 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" data-dimension25=""><strong>Get a AU$750 discount when you buy any Galaxy Z Fold 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans</strong></a></p><p>Optus offers a simplified, model-agnostic plan deal by slashing AU$750 off any model in the lineup (Z Fold 8 or Z Fold 8 Ultra) on a 12-, 24-, or 36-month repayment plan. To complement the device discount, Optus also takes AU$15p/m off Choice Plus SIM-only mobile plans for the first 12 months. This offer ends on August 12, 2026.<a class="view-deal button" href="https://www.optus.com.au/mobile/phones/samsung/galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="18ae8fd0-84cf-11f1-9fce-2d74e41bf1cc" data-action="Deal Block" data-label="Optus: Get a AU$750 discount when you buy any Galaxy Z Fold 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" data-dimension48="Optus: Get a AU$750 discount when you buy any Galaxy Z Fold 8 device and stay connected for 12, 24 or 36 months + AU$15p/m discount for the first 12 months on Choice Plus plans" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="18ae9034-84cf-11f1-9f13-dbfb2fea9ee9" data-action="Deal Block" data-label="Vodafone: Save up to AU$350 when purchasing Galaxy Z Fold 7 on an eligible 24- or 36-month plan" data-dimension48="Vodafone: Save up to AU$350 when purchasing Galaxy Z Fold 7 on an eligible 24- or 36-month plan" href="https://www.vodafone.com.au/mobile/mobile-phones/samsung/samsung-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:550px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="QfajE7yyJxPSmrv4c6Jwv7" name="vodafone logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QfajE7yyJxPSmrv4c6Jwv7.jpg" mos="" align="middle" fullscreen="" width="550" height="550" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Vodafone: </strong><a href="https://www.vodafone.com.au/mobile/mobile-phones/samsung/samsung-galaxy-z-fold8" target="_blank" data-dimension112="18ae9034-84cf-11f1-9f13-dbfb2fea9ee9" data-action="Deal Block" data-label="Vodafone: Save up to AU$350 when purchasing Galaxy Z Fold 7 on an eligible 24- or 36-month plan" data-dimension48="Vodafone: Save up to AU$350 when purchasing Galaxy Z Fold 7 on an eligible 24- or 36-month plan" data-dimension25=""><strong>Save up to AU$350 when purchasing Galaxy Z Fold 7 on an eligible 24- or 36-month plan</strong></a></p><p>Vodafone knocks AU$700 off both the Z Fold 8 and Z Fold 8 Ultra on 24- or 36-month repayment contracts. Customers signing up can also claim a AU$300 bonus trade-in credit and gain access to deep wearable discounts, taking up to AU$200 off the Galaxy Watch 9 or AU$500 off the Galaxy Watch Ultra 2 when bundled together. This offer ends August 13, 2026.<a class="view-deal button" href="https://www.vodafone.com.au/mobile/mobile-phones/samsung/samsung-galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="18ae9034-84cf-11f1-9f13-dbfb2fea9ee9" data-action="Deal Block" data-label="Vodafone: Save up to AU$350 when purchasing Galaxy Z Fold 7 on an eligible 24- or 36-month plan" data-dimension48="Vodafone: Save up to AU$350 when purchasing Galaxy Z Fold 7 on an eligible 24- or 36-month plan" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="79cadb10-8647-11f1-9cdf-21f34984f379" data-action="Deal Block" data-label="Telstra: Save up to AU$800 when purchasing Galaxy Z Fold 8 on an eligible 24- or 36-month plan + AU$300 bonus trade-in creditTelstra is knocking AU$800 off the Z Fold 8 Ultra and AU$700 off the standard Z Fold 8 if you put the phone on a 12-, 24- or 36-month plan. You can also get a AU$300 trade-in bonus on top of your old device's trade-in value. This offer ends August 13, 2026." data-dimension48="Telstra: Save up to AU$800 when purchasing Galaxy Z Fold 8 on an eligible 24- or 36-month plan + AU$300 bonus trade-in creditTelstra is knocking AU$800 off the Z Fold 8 Ultra and AU$700 off the standard Z Fold 8 if you put the phone on a 12-, 24- or 36-month plan. You can also get a AU$300 trade-in bonus on top of your old device's trade-in value. This offer ends August 13, 2026." target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="f5n3uyYaoTiQepuaUPfaBg" name="telstra-square-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/f5n3uyYaoTiQepuaUPfaBg.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Telstra: Save up to AU$800 when purchasing Galaxy Z Fold 8 on an eligible 24- or 36-month plan + AU$300 bonus trade-in credit</strong></p><p>Telstra is knocking AU$800 off the Z Fold 8 Ultra and AU$700 off the standard Z Fold 8 if you put the phone on a 12-, 24- or 36-month plan. You can also get a AU$300 trade-in bonus on top of your old device's trade-in value. This offer ends August 13, 2026.<a class="view-deal button" href="" target="_blank" rel="nofollow" data-dimension112="79cadb10-8647-11f1-9cdf-21f34984f379" data-action="Deal Block" data-label="Telstra: Save up to AU$800 when purchasing Galaxy Z Fold 8 on an eligible 24- or 36-month plan + AU$300 bonus trade-in creditTelstra is knocking AU$800 off the Z Fold 8 Ultra and AU$700 off the standard Z Fold 8 if you put the phone on a 12-, 24- or 36-month plan. You can also get a AU$300 trade-in bonus on top of your old device's trade-in value. This offer ends August 13, 2026." data-dimension48="Telstra: Save up to AU$800 when purchasing Galaxy Z Fold 8 on an eligible 24- or 36-month plan + AU$300 bonus trade-in creditTelstra is knocking AU$800 off the Z Fold 8 Ultra and AU$700 off the standard Z Fold 8 if you put the phone on a 12-, 24- or 36-month plan. You can also get a AU$300 trade-in bonus on top of your old device's trade-in value. This offer ends August 13, 2026." data-dimension25="">View Deal</a></p></div><h2 id="galaxy-z-fold-8-vs-galaxy-z-fold-8-ultra-what-do-you-get">Galaxy Z Fold 8 vs Galaxy Z Fold 8 Ultra — what do you get?</h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Samsung Galaxy Z Fold 8</p></th><th  ><p>Samsung Galaxy Z Fold 8 Ultra</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From AU$2,699</p></td><td  ><p>From AU$2,999</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong></p></td><td  ><p>7.6 inches AMOLED (1848 x 2448, 1-120Hz)</p></td><td  ><p>8 inches AMOLED (2504 x 2256, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>5.5 inches AMOLED (1248 x 1972, 1-120Hz) </p></td><td  ><p>6.5 inches AMOLED (1080 x 2520, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</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>Rear cameras</strong></p></td><td  ><p>50MP wide, 50MP Ultra wide (10x digital zoom)</p></td><td  ><p>200MP wide, 50MP ultra-wide, 10MP telephoto (3x optical)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover camera</strong></p></td><td  ><p>10MP</p></td><td  ><p>10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Main display camera</strong></p></td><td  ><p>10MP (f/2.2)</p></td><td  ><p>10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired / 20W wireless</p></td><td  ><p>45W wired / 20W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,800 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>123.9 x 81.9 x 9.7 mm (folded), 161.4 x 123.9 x 4.5 mm (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.16 inches) unfolded</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>201 grams </p></td><td  ><p>215 grams</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><strong>Colors</strong> </p></td><td  ><p>Lavender, Graphite, Cream, Pistachio (online)</p></td><td  ><p>Violet shadow, Cream, Graphite, Violet Green (online exclusive)</p></td></tr></tbody></table></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Leaked iOS 27 code hints Apple can completely lock down leased iPhones over missed payments ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/leaked-ios-27-code-hints-apple-can-completely-lock-down-leased-iphones-over-missed-payments</link>
                                                                            <description>
                            <![CDATA[ Leaked iOS 27 code appears to reveal potential restrictions Apple could place on leased iPhones due to missed payments. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">orHNYtKEERcbP3iNm2BqzF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/5WnqNRxctGBQQ6NnmhWyA9-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 00:26:39 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/5WnqNRxctGBQQ6NnmhWyA9-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone 17 Pro review.]]></media:description>                                                            <media:text><![CDATA[iPhone 17 Pro review.]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone 17 Pro review.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/5WnqNRxctGBQQ6NnmhWyA9-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It appears likely that Apple is looking to make a big shift in how it treats leased iPhones and payment plans. The changes include a new <a href="https://www.tomsguide.com/us/iphone-upgrade-program-faq,news-21583.html">Upgrade Program </a>and leaked <a href="https://www.tomsguide.com/phones/iphones/ios-27-public-beta-is-now-live-9-features-you-need-to-try-first">iOS 27</a> beta code that suggests Apple could restrict iPhones when customers skip payments.</p><h2 id="apple-upgrade-program">Apple Upgrade Program</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UfsgdagGx97Tu2BSXw2yy7" name="GettyImages-2226561632" alt="apple store" src="https://cdn.mos.cms.futurecdn.net/UfsgdagGx97Tu2BSXw2yy7.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Agoes Rudianto/NurPhoto via Getty Images)</span></figcaption></figure><p>The code leak (from <a href="https://9to5mac.com/2026/07/21/ios-27-code-suggests-apple-could-restrict-leased-devices-after-missed-payments/" target="_blank">9to5Mac</a>) appears to coincide with a report from yesterday that Apple is planning to <a href="https://www.tomsguide.com/phones/iphones/should-you-lease-your-next-iphone-what-you-need-to-know-about-the-rumored-apple-upgrade-program">ditch the iPhone Upgrade Program</a> in favor of one that lets you lease different Apple devices.</p><p>According to Bloomberg's Mark Gurman, Apple will partner with Klarna to finance the program, which would cover most iPhones, Macs, MacBooks, iPads and Apple Watches, save the entry-level models. The leases would run between 24 and 36 months depending on which device you get.</p><p>Like car leases, the Program would let you pay off your device or upgrade to a new model before the lease ends. At the end of the term, you could keep the device or return it.</p><h2 id="ios-27">iOS 27</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Z5AREXkHH3WuxG2NVDBMVA" name="iOS 27" alt="iOS 27 logo on iPhone" src="https://cdn.mos.cms.futurecdn.net/Z5AREXkHH3WuxG2NVDBMVA.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide/Apple/Shutterstock)</span></figcaption></figure><p>With that in mind, according to 9to5Mac, iOS 27 contains code that reveals a "broader system for managing a financed iPhone." This system apparently includes the ability to restrict apps and service if a payment is missed.</p><p>There is something called App Managed Features which would authorize financing and perform status checks, presumably to ensure payments have been made.</p><p>If a payment is missed, the iPhone would be put in "Restricted Mode." This mode "blocks access to most apps." A small set of apps would remain available, including:</p><ul><li><strong>Accessibility Reader</strong></li><li><strong>App Store</strong></li><li><strong>Health</strong></li><li><strong>Magnifier</strong></li><li><strong>Phone</strong></li><li><strong>Clock</strong></li><li><strong>Settings</strong></li><li><strong>Wallet</strong></li><li><strong>Passwords</strong></li><li><strong>The Restricted Mode interface itself</strong></li></ul><p>Some apps like Messages and Home or safety apps might also remain accessible. Though it seems the financial provider has control over the exceptions.</p><p>Apparently, the number of missed payments that trigger Restricted Mode is up to the financial provider and their policies. </p><h2 id="when-could-restricted-mode-arrive">When could Restricted Mode arrive?</h2><p>Apple is rumored to launch the new Apple Upgrade Program next week on July 28. However, 9to5Mac couldn't find references to the Restricted Mode in the current beta code or iOS 26.6 RC, which was released yesterday.</p><p>It's possible Apple could launch either feature later.</p><p>We'll know in less than a week whether or not Apple decides to actually launch its revised Upgrade Program. </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/forget-iphone-18-pro-iphone-20-tipped-to-get-apples-biggest-screen-upgrade-ever">Forget iPhone 18 Pro — iPhone 20 tipped to get Apple’s biggest screen upgrade ever</a></li><li><a href="https://www.tomsguide.com/computing/new-report-details-huge-mac-overhaul-for-macbooks-imacs-and-mac-studio">New report details huge Mac overhaul for MacBooks, iMacs and Mac Studio</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-card-takes-aim-at-apple-card-with-way-more-perks-and-rewards-heres-what-you-get">Samsung Galaxy Card takes aim at Apple Card with way more perks and rewards — here’s what you get</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Best Galaxy Z Flip 8 deals: get Samsung's new foldable for free ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/samsung-phones/best-galaxy-z-flip-8-deals-get-samsungs-new-foldable-for-free</link>
                                                                            <description>
                            <![CDATA[ The first round of Galaxy Z Flip 8 preorder deals are live. From AT&T to Samsung, here are all the best deals I'd buy at carriers and retailers. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">K3AQ3stDNey4NiS8bxtM7X</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UsDbKYaT4XPPXsE8AmtpCJ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 22 Jul 2026 18:24:25 +0000</pubDate>                                                                                                                                <updated>Fri, 24 Jul 2026 14:04:05 +0000</updated>
                                                                                                                                            <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.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&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;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.&amp;nbsp;&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/UsDbKYaT4XPPXsE8AmtpCJ-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Flip 8 held in hand]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Flip 8 held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Flip 8 held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UsDbKYaT4XPPXsE8AmtpCJ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>With a starting price of $1,199, the new Galaxy Z Flip 8 is $100 pricier than its predecessor. That makes Galaxy Z Flip 8 preorder deals all the more important if you're looking to save money. </p><p>Unveiled at the recent Galaxy Unpacked event, the new phone will release on August 7. It was announced alongside its pricier siblings, the Galaxy Z Fold 8 ($1,899) and Galaxy Z Fold 8 Ultra ($2,099).</p><p>If you're looking to save money, the best Galaxy Z Flip 8 preorder deal right now comes from T-Mobile. For a limited time, you can get <a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">up to $1,100 off Galaxy Z Flip 8 at T-Mobile</a> with trade-in and Experience More or Experience Beyond plans. Or you can get up to $500 off with trade-in on most other unlimited plans. </p><p>In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review">Galaxy Z Flip 8 review</a>, we called it Samsung's sleekest and most refined flip phone to date. But Z Flip 7 owners aren't missing much in terms of hardware updates. If you're eager to get Samsung's new foldable, there are many Galaxy Z Flip 8 deals you can get right now. Below I've rounded up my favorite. (For more ways to save, check out our guide to the best <a href="https://www.tomsguide.com/coupons/samsung.com">Samsung promo codes</a>).</p><p><strong>Note:</strong> Verizon has yet to release any Galaxy Z Flip 8 preorder deals. In the meantime, you can <a href="https://www.samsung.com/us/smartphones/galaxy-z-flip8/buy/galaxy-z-flip8-256gb-verizon-sku-sm-f776uliavzw/" target="_blank" rel="nofollow">preorder the Galaxy Z Flip 8 for Verizon via Samsung</a> and get up to $900 in bill credits via trade-in and select data plans.  </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/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>up to $1,100 off w/ trade-in + unlimited</strong></a></li><li><strong>Samsung: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-flip8/buy/galaxy-z-flip8-256gb-unlocked-sku-sm-f776uliaxaa/" target="_blank" rel="nofollow"><strong>up to $600 off w/ trade-in or $150 credit</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 + $200 gift card</strong></a></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-flip8.html" target="_blank" rel="nofollow"><strong>$5/month w/ trade-in + unlimited</strong></a><strong></strong></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-flip8" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade-in</strong></a><strong></strong></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12FP315" target="_blank" rel="nofollow"><strong>for $1,199 w/ $200 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-galaxy-z-flip-8-deals"><span>Galaxy Z Flip 8 deals</span></h3><div class="product"><a data-dimension112="a382c82c-85f8-11f1-8d64-db4a44dbbade" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-flip8/buy/galaxy-z-flip8-256gb-unlocked-sku-sm-f776uliaxaa/" 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.jpg" mos="" align="middle" fullscreen="" width="1312" height="734" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Flip 8: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-flip8/buy/galaxy-z-flip8-256gb-unlocked-sku-sm-f776uliaxaa/" target="_blank" rel="nofollow" data-dimension112="a382c82c-85f8-11f1-8d64-db4a44dbbade" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $600 off w/ trade-in @ Samsung</strong></a><br>Samsung is knocking up to $600 off its Galaxy Z Flip 8 preorder when you trade-in an older phone. Or you can get a $150 Samsung credit with no trade-in. The phone features a 6.9-inch AMOLED (1080 x 2520) inner display w/ 120Hz refresh, 4.1-inch AMOLED (948 x 1048) outer display w/ 120Hz refresh, Snapdragon 8 Elite Gen 5 for Galaxy chipset, 12GB of RAM, and 256GB of storage. You also get 50MP f/1.8 main and 12MP f/2.2 ultra-wide rear cameras and a 10MP f2.2 selfie cam. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review">Galaxy Z Flip 8 review</a>, we said it's Samsung's sleekest and most refined flip phone to date, but not a necessary upgrade for current Z Flip 7 owners. <a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-flip8/buy/galaxy-z-flip8-256gb-unlocked-sku-sm-f776uliaxaa/" target="_blank" rel="nofollow" data-dimension112="a382c82c-85f8-11f1-8d64-db4a44dbbade" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Flip 8: up to $600 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="a382c8a4-85f8-11f1-8d1f-a9faa1a967e6" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,100 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Flip 8: up to $1,100 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.jpg" mos="" align="middle" fullscreen="" width="600" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Flip 8: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="a382c8a4-85f8-11f1-8d1f-a9faa1a967e6" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,100 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Flip 8: up to $1,100 off w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>up to $1,100 off w/ trade-in + unlimited @ T-Mobile</strong></a><br>T-Mobile is offering various Galaxy Z Flip 8 deals. You can get the phone for $1,100 off with trade-in and when you add a line on T-Mobile's Experience More or Experience Beyond plans. Or get it for $500 off with trade-in on most other data 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="a382c8a4-85f8-11f1-8d1f-a9faa1a967e6" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,100 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Flip 8: up to $1,100 off w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="a382c91c-85f8-11f1-a48d-efc60c6b7860" data-action="Deal Block" data-label="Galaxy Z Flip 8: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Flip 8: $5/month w/ trade-in + unlimited @ AT&amp;T" href="https://www.att.com/buy/phones/samsung-galaxy-z-flip8.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:225px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Flip 8: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-flip8.html" target="_blank" rel="nofollow" data-dimension112="a382c91c-85f8-11f1-a48d-efc60c6b7860" data-action="Deal Block" data-label="Galaxy Z Flip 8: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Flip 8: $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 a Galaxy Z Flip 8 for $5.56/month when you trade-in a phone and open an eligible unlimited data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/samsung-galaxy-z-flip8.html" target="_blank" rel="nofollow" data-dimension112="a382c91c-85f8-11f1-a48d-efc60c6b7860" data-action="Deal Block" data-label="Galaxy Z Flip 8: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Flip 8: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="a382c994-85f8-11f1-8a4f-43e06bd270af" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ Best Buy" data-dimension48="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ 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.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Flip 8: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="a382c994-85f8-11f1-8a4f-43e06bd270af" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ Best Buy" data-dimension48="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ Best Buy" data-dimension25=""><strong>up to $1,200 off w/ trade-in + $200 gift card @ Best Buy</strong></a><br>Best Buy is offering one of the best Galaxy Z Flip 8 deals right now. Purchase your phone at Best Buy and you'll get up to $1,200 off via trade-in and 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="a382c994-85f8-11f1-8a4f-43e06bd270af" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ Best Buy" data-dimension48="Galaxy Z Flip 8: up to $1,200 off w/ trade-in + $200 gift card @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="a382ca0c-85f8-11f1-b6ee-278370d2209b" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,100 off w/ trade-in @ Verizon" data-dimension48="Galaxy Z Flip 8: up to $1,100 off w/ trade-in @ Verizon" href="https://www.verizon.com/smartphones/samsung/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Flip 8: </strong><a href="https://www.verizon.com/smartphones/samsung/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="a382ca0c-85f8-11f1-b6ee-278370d2209b" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,100 off w/ trade-in @ Verizon" data-dimension48="Galaxy Z Flip 8: up to $1,100 off w/ trade-in @ Verizon" data-dimension25=""><strong>up to $1,100 off w/ trade-in @ Verizon</strong></a><br>Verizon is offering aggressive Galaxy Z Flip 8 deals. Trade-in an old phone and you'll get up to $1,100 off Samsung's new foldable. <a class="view-deal button" href="https://www.verizon.com/smartphones/samsung/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="a382ca0c-85f8-11f1-b6ee-278370d2209b" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,100 off w/ trade-in @ Verizon" data-dimension48="Galaxy Z Flip 8: up to $1,100 off w/ trade-in @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="a382ca84-85f8-11f1-bb49-9b4d92238e08" data-action="Deal Block" data-label="Amazon is offering a free $200 Amazon gift card when you buy your Galaxy Z Flip 8. You'll pay full price for the unlocked phone, but get a generous gift card in return." data-dimension48="Amazon is offering a free $200 Amazon gift card when you buy your Galaxy Z Flip 8. You'll pay full price for the unlocked phone, but get a generous gift card in return." data-dimension25="$1199" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12FP315" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1199px;"><p class="vanilla-image-block" style="padding-top:125.10%;"><img id="rTkAPNzBbP77RUVHtMufoZ" name="Galaxy Z Flip 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rTkAPNzBbP77RUVHtMufoZ.jpg" mos="" align="middle" fullscreen="" width="1199" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a free $200 Amazon gift card when you buy your Galaxy Z Flip 8. You'll pay full price for the unlocked phone, but get a generous gift card in return.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12FP315" target="_blank" rel="nofollow" data-dimension112="a382ca84-85f8-11f1-bb49-9b4d92238e08" data-action="Deal Block" data-label="Amazon is offering a free $200 Amazon gift card when you buy your Galaxy Z Flip 8. You'll pay full price for the unlocked phone, but get a generous gift card in return." data-dimension48="Amazon is offering a free $200 Amazon gift card when you buy your Galaxy Z Flip 8. You'll pay full price for the unlocked phone, but get a generous gift card in return." data-dimension25="$1199">View Deal</a></p></div><div class="product"><a data-dimension112="a382caf2-85f8-11f1-82b8-9d3b5d4064e8" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,00 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Flip 8: up to $1,00 off w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-flip8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Flip 8: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-flip8" target="_blank" rel="nofollow" data-dimension112="a382caf2-85f8-11f1-82b8-9d3b5d4064e8" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,00 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Flip 8: up to $1,00 off w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>up to $1,00 off w/ trade-in @ Xfinity Mobile</strong></a><br>Purchase the Galaxy Z Flip 8 at Xfinity Mobile and you'll save up to $1,000 after trade-in. If you don't have a phone to trade-in, you can still get up to $600 off Samsung's new phone. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-flip8" target="_blank" rel="nofollow" data-dimension112="a382caf2-85f8-11f1-82b8-9d3b5d4064e8" data-action="Deal Block" data-label="Galaxy Z Flip 8: up to $1,00 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Flip 8: up to $1,00 off w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="a382cb6a-85f8-11f1-82d5-eb4ed3c9c3b1" data-action="Deal Block" data-label="Galaxy Z Flip 7: free w/ unlimited @ Boost Mobile" data-dimension48="Galaxy Z Flip 7: free w/ unlimited @ Boost Mobile" href="https://www.boostmobile.com/plans/infinite-access-for-galaxy" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:713px;"><p class="vanilla-image-block" style="padding-top:38.85%;"><img id="UGYgmHB5HuHtAFmJHSMZnU" name="Boost Mobile logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/UGYgmHB5HuHtAFmJHSMZnU.jpg" mos="" align="middle" fullscreen="" width="713" height="277" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Flip 7: </strong><a href="https://www.boostmobile.com/plans/infinite-access-for-galaxy" target="_blank" rel="nofollow" data-dimension112="a382cb6a-85f8-11f1-82d5-eb4ed3c9c3b1" data-action="Deal Block" data-label="Galaxy Z Flip 7: free w/ unlimited @ Boost Mobile" data-dimension48="Galaxy Z Flip 7: free w/ unlimited @ Boost Mobile" data-dimension25=""><strong>free w/ unlimited @ Boost Mobile</strong></a><br>Boost Mobile is offering the Galaxy Flip 7 for free. Best of all, no trade-in is required. You'll just need to sign up to an unlimited data plan from $65/month.<a class="view-deal button" href="https://www.boostmobile.com/plans/infinite-access-for-galaxy" target="_blank" rel="nofollow" data-dimension112="a382cb6a-85f8-11f1-82d5-eb4ed3c9c3b1" data-action="Deal Block" data-label="Galaxy Z Flip 7: free w/ unlimited @ Boost Mobile" data-dimension48="Galaxy Z Flip 7: free w/ unlimited @ Boost Mobile" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-galaxy-z-flip-8-specs"><span>Galaxy Z Flip 8 specs</span></h3><div ><table><tbody><tr><td class="firstcol " ><p><strong>Price</strong>    </p></td><td  ><p>$1,199 / £1,149 </p></td></tr><tr><td class="firstcol " ><p><strong>Release date</strong></p></td><td  ><p>August 7</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong>    </p></td><td  ><p>6.9-inch AMOLED (1080 x 2520, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong>    </p></td><td  ><p>4.1-inch AMOLED (948 x 1048, 60Hz / 120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong>    </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></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>50MP main (f/1.8), 12MP ultrawide (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Camera</strong>    </p></td><td  ><p>10MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong>    </p></td><td  ><p>25W wired / 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong>    </p></td><td  ><p>4,300 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong>    </p></td><td  ><p>6.57 x 2.97 x 0.24 inches unfolded (166.9 x 75.4 x 6.1 mm), 3.37 x 2.97 x 0.52 inches folded (85.7 x 75.4 x 13.1mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong>    </p></td><td  ><p>6.35 ounces (180 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>IP Rating</strong>    </p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong>    </p></td><td  ><p>Pink, Graphite, Cream, Mint (online)</p></td></tr></tbody></table></div><p>In our initial hands-on, we aren't as infatuated with the Galaxy Z Flip 8 as we were with its predecessor. For one, it now comes with a $100 price increase which places it closer to flagships like the $1,199 iPhone 17 Pro Max and the $1,299 Galaxy S26 Ultra, which offers a more robust camera system, a larger battery, and more productivity features. Additionally, the Galaxy Z Flip 8 feels more like a simple, iterative upgrade than it does a groundbreaking phone. </p><p>That said, there are many things Samsung got right with this phone. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-hands-on-review">Galaxy Z Flip 8 review</a>, we called it Samsung's sleekest and most refined flip phone to date. We also feel its a great phone for vlogging than either the Z Fold 8 or Z Fold 8 Ultra. That’s primarily due to its form factor, which is far better suited for capturing video using the rear cameras alongside the FlexWindow display. </p><p>Stay tuned to Tom's Guide as we spend more time with the phone and give you our final verdict. Alternatively, if you're interested in Samsung's Fold line, make sure to check out our guide to the best <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">Galaxy Z Fold 8 preorder deals</a>.</p><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[ Galaxy Z Fold 8 preorder deals: here's how I'm saving up to $1,200 on Samsung's new phones ]]></title>
                                                                                                                                                                                                <link>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</link>
                                                                            <description>
                            <![CDATA[ Samsung Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra preorder deals are now live. Here's how to score Samsung's new phones at T-Mobile, AT&T, and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">QJ4rKzJiVJEYbAeupkwY9m</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Qd2JN4d4E7X9Gfb4qL3o5n-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 22 Jul 2026 16:00:56 +0000</pubDate>                                                                                                                                <updated>Fri, 24 Jul 2026 13:56:51 +0000</updated>
                                                                                                                                            <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.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&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;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.&amp;nbsp;&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/Qd2JN4d4E7X9Gfb4qL3o5n-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Qd2JN4d4E7X9Gfb4qL3o5n-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung's new lineup of foldable phones has officially been unveiled. With starting prices that reach up to $2,099, Galaxy Z Fold 8 preorder deals have never been so important. On this page I'm rounding up all of the best deals you can get from every retailer and carrier. </p><p>The new lineup includes the Galaxy Z Fold 8 ($1,899), Galaxy Z Fold 8 Ultra ($2,099), and the Galaxy Z Flip 8 ($1,199). The latter will be released on August 7, whereas both Fold phones will release on August 8. </p><p>One of the best Galaxy Z Fold 8 preorders this week comes courtesy of Samsung itself. For a limited time, you can get <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow">up to $1,200 off the Galaxy Z Fold 8 at Samsung</a> when you preorder and trade in an older device. If you don't have a trade-in, you'll get a <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow">$200 Samsung credit</a> with your preorder. 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. In the past, we've seen complimentary storage upgrades, but for now there are none. </p><p>There are plenty more Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra preorder deals and below I'm rounding them all up. (For more ways to save, check out our guide to today's best <a href="https://www.tomsguide.com/coupons/samsung.com">Samsung promo codes</a>).</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-preorder-deals"><span>Galaxy Z Fold 8 preorder deals</span></h3><div class="product"><a data-dimension112="f26496dc-8549-11f1-8cac-a1fb39c15144" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 preorder: 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.jpg" mos="" align="middle" fullscreen="" width="600" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="f26496dc-8549-11f1-8cac-a1fb39c15144" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 preorder: 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="f26496dc-8549-11f1-8cac-a1fb39c15144" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="f2649556-8549-11f1-85ea-4d39fe4278de" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: 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.jpg" mos="" align="middle" fullscreen="" width="1312" height="734" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorder: </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="f2649556-8549-11f1-85ea-4d39fe4278de" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: 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 preorders 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="f2649556-8549-11f1-85ea-4d39fe4278de" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="f26495ba-8549-11f1-a661-ef63e6f6383e" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 preorder: 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.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorder: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow" data-dimension112="f26495ba-8549-11f1-a661-ef63e6f6383e" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 preorder: 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="f26495ba-8549-11f1-a661-ef63e6f6383e" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 preorder: free w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="f264961e-8549-11f1-883f-814277ccde4a" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorders: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 preorders: 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.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorders: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="f264961e-8549-11f1-883f-814277ccde4a" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorders: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 preorders: 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 preorder deals around. Preorder your phone at Best Buy with trade-in and you'll up to $1,200 off. Plus, you'll get a free $200 Best Buy gift card just for preordering. <a class="view-deal button" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="f264961e-8549-11f1-883f-814277ccde4a" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorders: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 preorders: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="f2649678-8549-11f1-a956-1df363971908" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 preorder: 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.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorder: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="f2649678-8549-11f1-a956-1df363971908" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 preorder: 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 preorder with trade-in and eligible unlimited data plans. Or preorder 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="f2649678-8549-11f1-a956-1df363971908" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="f2649740-8549-11f1-8c05-aba16da32cb9" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8 preorder: 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.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 preorder: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="f2649740-8549-11f1-8c05-aba16da32cb9" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8 preorder: 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 its Galaxy Z Fold 8 preorders (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="f2649740-8549-11f1-8c05-aba16da32cb9" data-action="Deal Block" data-label="Galaxy Z Fold 8 preorder: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8 preorder: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="f264979a-8549-11f1-b289-b76da5d816d0" data-action="Deal Block" data-label="Galaxy Z Fold 7 preorder: up to $1,100 off w/ unlimited @ Boost Mobile" data-dimension48="Galaxy Z Fold 7 preorder: up to $1,100 off w/ unlimited @ Boost Mobile" href="https://www.boostmobile.com/plans/infinite-access-for-galaxy" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:713px;"><p class="vanilla-image-block" style="padding-top:38.85%;"><img id="UGYgmHB5HuHtAFmJHSMZnU" name="Boost Mobile logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/UGYgmHB5HuHtAFmJHSMZnU.jpg" mos="" align="middle" fullscreen="" width="713" height="277" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy Z Fold 7 preorder: </strong><a href="https://www.boostmobile.com/plans/infinite-access-for-galaxy" target="_blank" rel="nofollow" data-dimension112="f264979a-8549-11f1-b289-b76da5d816d0" data-action="Deal Block" data-label="Galaxy Z Fold 7 preorder: up to $1,100 off w/ unlimited @ Boost Mobile" data-dimension48="Galaxy Z Fold 7 preorder: up to $1,100 off w/ unlimited @ Boost Mobile" data-dimension25=""><strong>up to $1,100 off w/ unlimited @ Boost Mobile</strong></a><br>Boost Mobile is offering up to $1,100 off its Galaxy Z Fold 7 preorders. Best of all, no trade-in is required. You'll just need to sign up to an unlimited data plan from $65/month. <a class="view-deal button" href="https://www.boostmobile.com/plans/infinite-access-for-galaxy" target="_blank" rel="nofollow" data-dimension112="f264979a-8549-11f1-b289-b76da5d816d0" data-action="Deal Block" data-label="Galaxy Z Fold 7 preorder: up to $1,100 off w/ unlimited @ Boost Mobile" data-dimension48="Galaxy Z Fold 7 preorder: up to $1,100 off w/ unlimited @ Boost Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="f26497fe-8549-11f1-a25d-51c6445e5288" 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.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="f26497fe-8549-11f1-a25d-51c6445e5288" 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 preorder your Galaxy Z Fold 8. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="f26497fe-8549-11f1-a25d-51c6445e5288" 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><div class="product"><a data-dimension112="f2649858-8549-11f1-abbd-5577bf812699" data-action="Deal Block" data-label="Visible: up to $10 off/month select data plans @ Visible" data-dimension48="Visible: up to $10 off/month select data plans @ Visible" href="https://www.visible.com/plans" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="nXRVmdXfPxa8NUZ7ukyY7P" name="visible_logo_new.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nXRVmdXfPxa8NUZ7ukyY7P.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Visible: </strong><a href="https://www.visible.com/plans" target="_blank" rel="nofollow" data-dimension112="f2649858-8549-11f1-abbd-5577bf812699" data-action="Deal Block" data-label="Visible: up to $10 off/month select data plans @ Visible" data-dimension48="Visible: up to $10 off/month select data plans @ Visible" data-dimension25=""><strong>up to $10 off/month select data plans @ Visible</strong></a><br>It's not a Galaxy Z Fold 8 deal per se, but this deal will help you save on your data plan. Visible is taking $5/month off its Visible+ plan or $10 off/month its Visible+ Pro plan via coupon code "SUMMER". Both plans offer unlimited talk, text, and 5G data including Mexico and Canada. Visible+ Pro includes premium features like a smartwatch data plan and up to 4K UHD quality video. You can bring your own phone to Visible. <a class="view-deal button" href="https://www.visible.com/plans" target="_blank" rel="nofollow" data-dimension112="f2649858-8549-11f1-abbd-5577bf812699" data-action="Deal Block" data-label="Visible: up to $10 off/month select data plans @ Visible" data-dimension48="Visible: up to $10 off/month select data plans @ Visible" 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="1f2f6380-85e6-11f1-9657-1373f57c6042" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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.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 preorder: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="1f2f6380-85e6-11f1-9657-1373f57c6042" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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="1f2f6380-85e6-11f1-9657-1373f57c6042" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra preorder: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="1f2f64ac-85e6-11f1-8e69-df13e5cc923f" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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.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 preorder: </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="1f2f64ac-85e6-11f1-8e69-df13e5cc923f" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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 preorders 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="1f2f64ac-85e6-11f1-8e69-df13e5cc923f" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="1f2f6524-85e6-11f1-af97-5b27ea54b6a0" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorders: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra preorders: 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.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 preorders: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="1f2f6524-85e6-11f1-af97-5b27ea54b6a0" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorders: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra preorders: 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 preorder deals around. Preorder your phone at Best Buy with trade-in and you'll up to $1,200 off. Plus, you'll get a free $200 Best Buy gift card just for preordering. <a class="view-deal button" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="1f2f6524-85e6-11f1-af97-5b27ea54b6a0" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorders: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra preorders: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="90bce23c-86b0-11f1-bb38-0d45cdd3bae8" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra preorder: $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.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 preorder: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow" data-dimension112="90bce23c-86b0-11f1-bb38-0d45cdd3bae8" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra preorder: $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="90bce23c-86b0-11f1-bb38-0d45cdd3bae8" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra preorder: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="1f2f6588-85e6-11f1-baff-777f753c915b" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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.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 preorder: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="1f2f6588-85e6-11f1-baff-777f753c915b" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra preorder: 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 preorder with trade-in and eligible unlimited data plans. Or preorder 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="1f2f6588-85e6-11f1-baff-777f753c915b" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra preorder: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="90bce2be-86b0-11f1-b599-5db675b11dcd" data-action="Deal Block" data-label="Amazon is offering a free $350 Amazon gift card when you preorder your Galaxy Z Fold 8 Ultra. It's one of the most generous pre-order deals we've seen on the unlocked version of Samsung's foldable." data-dimension48="Amazon is offering a free $350 Amazon gift card when you preorder your Galaxy Z Fold 8 Ultra. It's one of the most generous pre-order deals we've seen on the unlocked version of Samsung's foldable." 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.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 preorder your Galaxy Z Fold 8 Ultra. It's one of the most generous pre-order 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="90bce2be-86b0-11f1-b599-5db675b11dcd" data-action="Deal Block" data-label="Amazon is offering a free $350 Amazon gift card when you preorder your Galaxy Z Fold 8 Ultra. It's one of the most generous pre-order deals we've seen on the unlocked version of Samsung's foldable." data-dimension48="Amazon is offering a free $350 Amazon gift card when you preorder your Galaxy Z Fold 8 Ultra. It's one of the most generous pre-order deals we've seen on the unlocked version of Samsung's foldable." data-dimension25="$2099">View Deal</a></p></div><h2 id="galaxy-z-fold-8-vs-galaxy-z-fold-8-ultra-what-do-you-get-2">Galaxy Z Fold 8 vs Galaxy Z Fold 8 Ultra — what do you get?</h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Samsung Galaxy Z Fold 8</p></th><th  ><p>Samsung Galaxy Z Fold 8 Ultra</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $1,899 / £1,699</p></td><td  ><p>From $2,099 / £1,899</p></td></tr><tr><td class="firstcol " ><p><strong>Main display</strong></p></td><td  ><p>7.6 inches AMOLED (1848 x 2448, 1-120Hz)</p></td><td  ><p>8 inches AMOLED (2504 x 2256, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>5.5 inches AMOLED (1248 x 1972, 1-120Hz) </p></td><td  ><p>6.5 inches AMOLED (1080 x 2520, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</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>Rear cameras</strong></p></td><td  ><p>50MP wide, 50MP Ultra wide (10x digital zoom)</p></td><td  ><p>200MP wide, 50MP ultra-wide, 10MP telephoto (3x optical)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover camera</strong></p></td><td  ><p>10MP</p></td><td  ><p>10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Main display camera</strong></p></td><td  ><p>10MP (f/2.2)</p></td><td  ><p>10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired / 20W wireless</p></td><td  ><p>45W wired / 20W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,800 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>123.9 x 81.9 x 9.7 mm (folded), 161.4 x 123.9 x 4.5 mm (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.16 inches) unfolded</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>201 grams (7 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><strong>Colors</strong> </p></td><td  ><p>Lavender, Graphite, Cream, Pistachio (online)</p></td><td  ><p>Violet shadow, Cream, Graphite, Violet Green (online exclusive)</p></td></tr></tbody></table></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>